Агрегаты, хранилища и сервисный уровень - PullRequest
2 голосов
/ 24 августа 2010

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

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

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

1 Ответ

0 голосов
/ 24 августа 2010

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

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

...