Я довольно новичок в процессе проектирования OO, поэтому, пожалуйста, несите меня ....OO Design Question - Parent/Child (ren) - Циркуляр?
У меня есть два объекта, которые мне нужно моделировать как классы, называть их родителями и детьми (это достаточно близко к фактическому проблемный домен). У одного родителя будет один или несколько детей - я не заинтересован в этом заявлении у бездетных родителей.
Где мой мозг выходит на обед, это факт, что мне нужно найти любой из другого. В моей базе данных я могу реализовать это с нормальным отношением внешних ключей, а основанный на наборах характер SQL позволяет легко найти всех детей для данного родителя или родителя для данного ребенка. Но как объекты ...?
I думаю что родитель должен нести коллекцию (список, что угодно) детей. Я также считаю, что каждый ребенок должен иметь ссылку на своего Родитель. Однако циркулярная природа ссылок заставляет мою голову болеть.
Am I:
- На правильном пути?
- Полностью у основания? Если да, то что мне делать по-другому?
Это почти наверняка будет реализовано на VB.NET, но я пока еще не умею вырезать код.
Edit после 8 ответов:
Спасибо всем. Было трудно выбрать только один ответ, чтобы согласиться.
Чтобы прояснить несколько вещей, которые были допрошены в ответах:
- Родитель и ребенок очень разные лица - есть не наследование отношения вообще. Я выбрал имена , которые я сделал, потому что они действительно очень близки к реальному проблемному домену реального мира , и теперь вижу, что это источник замешательства от перспективы OO .
- Иерархия находится только на одном уровне - у детей никогда не будет детей в приложении.
Еще раз спасибо.
Могут ли дети иметь детей, или это одноуровневая иерархия? Если он многоуровневый, вам нужно посмотреть на композитный шаблон. –
Разве это не вопрос времени и пространства с хранением ссылок в узлах? Зависит от ограничений ... если пространство не является проблемой, сохранение ссылок в порядке, если у них есть целостность. –
@Harper Shelby - это одноуровневый. Дети никогда не будут иметь своих детей (в этом заявлении). Хороший вопрос. – RolandTumble