Definition: An underlying consistency of the domain itself, which, if reflected in a model, can help the design accommodate change more naturally.
Problem: When elements of a model or design are embedded in a monolithic construct, their functionality gets duplicated. The external interface doesn?t say everything a client might care about. Their meaning is hard to understand, because different concepts are mixed together.
On the other hand, breaking down classes and methods can pointlessly complicate the client, forcing client objects to understand how tiny pieces fit together. Worse, a concept can be lost completely. Half of a
uranium atom is not uranium. And of course, it isn?t just grain size that counts, but just where the grain runs.
Solution: Decompose design elements (operations, interfaces, classes, and
Aggregates)
into cohesive units, taking into consideration your intuition of the important divisions in the domain. Observe the axes of change and stability through successive refactorings and look for the underlying Conceptual Contours that explain these shearing patterns. Align the model with the consistent aspects of the domain that make it a viable area of knowledge in the first place.