2010-08-23 3 views
2

Возьмите класс, который имеет отношения с несколькими другими классами. Первый класс можно рассматривать как совокупность (корень). С точки зрения уровня обслуживания, как лучше всего разделить вызовы?Агрегаты, репозитории и сервисный уровень

  1. Вызов хранилище агрегата для всего графа объекта и вызвать из этого конкретного хранилища других хранилищ для обработки сохранения отношений (одно хранилища для каждого типа класса.
  2. Вызов вместилище агрегата для весь объектный граф и обрабатывать все в этом одном методе (так что сохраняем все отношения в том же методе).
  3. Из уровня обслуживания вызовите репозитории для агрегата, а затем сразу после этого снова из уровня сервиса , вызовите репозитории связанных классов.
  4. Добавьте дополнительный слой между s ervice и хранилищах и изнутри этого дополнительного слоя, как в варианте 3.

Я видел уже все 3 возможных решения в производственном коде, но меня интересует самое чистое решение и причина того, почему один выбрал бы этот подход.

ответ

0

Для меня это был бы выбор между вариантами 1 и 2 (мне нравится как можно более «верхний слой обслуживания»).

Какой из них я бы выбрал, будет зависеть от того, как используются отдельные типы агрегата; если они всегда (по крайней мере в настоящее время), используемые как часть этого одного агрегата, а не автономные, я бы, вероятно, разрешил агрегировать репозиторий с ними (но, возможно, все еще в отдельных методах), но если отдельные части могут также использоваться автономно (или как части других агрегатов), я бы, вероятно, склонялся к тому, чтобы иметь для них отдельные объекты репозитория, и вызывать эти репозитории из агрегированного хранилища.

Смежные вопросы