- When an object code become too complex
- When new concept domain comes in the code
- When more values are always used together
When the code in an object become too complex, maybe it is implementing too many concepts. To improve the design, we can break out coherent units of behavior into helper types.
If we need to introduce a new whole concept of the domain, maybe its the time to introduce a new value type. Its possible that the new object has no attributes. Dont worry: when the code grows, fields and method will be added inside the new value type.
When we have two or more object, always used together, maybe we can introduce the missing concept. We can now hide their fields behind a clean interface, satisfying the "composite simpler that the sum of its parts" principle.