Inappropriate Intimacy (General Form)
Symptoms
Causes
The two classes probably became intertwined a little at a time. By the time you realize there's a problem, they're coupled. There may be a missing class that should mediate between them. This problem is more serious between unrelated classes than between a parent and child.
What to Do
If two independent classes are entangled, use Move Method and Move Field to put the right pieces on the right class. If the tangled part seems to be a missing class, use Extract Class and Hide Delegate to introduce the new class. If classes point to each other, use Change Bidirectional Reference to Unidirectional to turn it into a one-way dependency. If a subclass is too coupled to its parent (as explained in "Inappropriate Intimacy [Subclass Form]," Chapter 9) If the subclass is accessing the parent's fields in an uncontrolled way, use Self Encapsulate Field. If the parent can define a general algorithm that the children can plug into, then use Form Template Method. If the parent and child need to be even more decoupled, then Replace Inheritance with Delegation.
Payoff
Reduces duplication. Often improves communication. May reduce size.
Contraindications
None identified.
|