One Into Many
From CSSEMediaWiki
(Difference between revisions)
(→Solution) |
(→Solution) |
||
Line 10: | Line 10: | ||
# If the class/object implements a [[Singleton]] pattern, remove the code required to save a single instance. | # If the class/object implements a [[Singleton]] pattern, remove the code required to save a single instance. | ||
# If it is a simple case of an object only being held by another object once when multiple are required, use a collection like a Set or List to encapsulate these objects. | # If it is a simple case of an object only being held by another object once when multiple are required, use a collection like a Set or List to encapsulate these objects. | ||
+ | ## Do not change existing interface initially. | ||
+ | ## Write a test for the existence of the collection. | ||
+ | ## Replace the existing field with a field holding the collection, making sure to rename the field. | ||
+ | ## Get the test to past. | ||
+ | ## Refactor to adjust any constructors as necessary. | ||
## Refactor to change any existing getter/setter methods if required. | ## Refactor to change any existing getter/setter methods if required. | ||
+ | ## Make sure all holding classes work for the situation. | ||
+ | ## Make sure all aggregated classes work for the situation. | ||
+ | ## Check any classes that use the model, refactor as necessary. | ||
# If a more complex problem exists, follow these steps: | # If a more complex problem exists, follow these steps: | ||
## ... | ## ... | ||
== See Also == | == See Also == |
Revision as of 06:28, 10 August 2009
Contents |
Overview
This pattern is to be used in cases where a previous implementation has a one to one relationship and it needs to be modified to a one to many relationship. This pattern is specifically designed for Objects; however it may be used for lower or higher level concepts.
The Problem
During initial coding/design, you failed to notice that a relationship had the potential to be one-to-many and instead coded it as one-to-one. Now, you realise your problem and need to rectify it.
General Issues
Solution
- If the class/object implements a Singleton pattern, remove the code required to save a single instance.
- If it is a simple case of an object only being held by another object once when multiple are required, use a collection like a Set or List to encapsulate these objects.
- Do not change existing interface initially.
- Write a test for the existence of the collection.
- Replace the existing field with a field holding the collection, making sure to rename the field.
- Get the test to past.
- Refactor to adjust any constructors as necessary.
- Refactor to change any existing getter/setter methods if required.
- Make sure all holding classes work for the situation.
- Make sure all aggregated classes work for the situation.
- Check any classes that use the model, refactor as necessary.
- If a more complex problem exists, follow these steps:
- ...