Вот чем я занимаюсь.
У меня есть общий класс репозитория Repository<TKey, TValue>
. Он имеет обычные методы шаблона репозитория.
Каждый репозиторий принимает IContext<TKey, TValue>
в своем конструкторе, который обеспечивает постоянство для репозитория.
У меня есть специализированные репозитории, которые состоят из общего репозитория, а затем методов, адаптированных к действиям репозитория, специфичным для специализированного объекта. Итак, если бы у меня был специализированный репозиторий для объектов Kitten, у него были бы методы ClimbTree (вероятно, берущие объект дерева), но не метод BuryBone (кость кости). Дело в том, что я делаю плохо, это создает ассоциацию между котенком и его деревом, которое необходимо сохранить. void CleanWhiskers()
может быть более простым примером. Это приводит к тому, что усы котят становятся чистыми.
Итак, теперь я думаю о схеме сохранения связанных дочерних объектов и начинаю задаваться вопросом, не ошибаюсь ли я уже.
Я начал с немного уродливых методов в репозитории для создания дочерних объектов. Таким образом, репозиторий котенка будет иметь метод CreateFurBall()
, который будет добавлять объект FurBall в коллекцию FurBall котенка И добавлять Furball в репозиторий FurBall для сохранения (фактически тот же объект).
Теперь я перешел на систему, в которой у меня есть что-то вроде ObservableCollection, который уведомляет свой родительский репозиторий при добавлении POCO. Так что я могу просто создать пушистого комка POCO и добавить его в коллекцию, которая затем будет автоматически зарегистрирована в репозитории пушистого комка.
Во-первых, я реализую nHibernate в контекстах, я думаю, что это довольно хорошо отображается. Это действительно открытый вопрос, для тех, кто уже шел по этому пути раньше, видите ли вы что-нибудь, что заставляет вас воскликнуть: «СТОП!!»