DDD и реализация постоянства - PullRequest
19 голосов
/ 23 августа 2011

Я впервые начинаю понимать DDD (в .Net), так как я перестраиваю некоторые основные компоненты устаревшего корпоративного приложения.

Я хочу кое-что прояснить,как мы реализуем постоянство в правильной архитектуре DDD?

Я понимаю, что сами домены являются невежественными в отношении постоянства и должны разрабатываться с использованием «вездесущего языка» и, разумеется, не навязываться ограничениям ЦАП месяцаили даже физическая база данных.

Правильно ли я понимаю, что интерфейсы репозитория находятся в сборке домена, а реализации репозитория существуют на уровне персистентности?Уровень персистентности содержит ссылку на уровень домена, а не наоборот?

Откуда вызываются мои реальные методы хранилища (CRUD)?

Ответы [ 3 ]

15 голосов
/ 24 августа 2011

Правильно ли я понимаю, что интерфейсы репозитория находятся в сборке домена, но реализации репозитория существуют на уровне персистентности?Уровень персистентности содержит ссылку на уровень домена, а не наоборот?

Да, это очень хороший подход.

Где мои настоящие методы репозитория (CRUD) вызывается из?

Возможно, было бы неплохо не думать в терминах CRUD, потому что он слишком ориентирован на данные и может привести вас к универсальной ловушке репозитория . Репозиторий помогает управлять серединой и концом жизни для объектов домена . Фабрики часто ответственны за начало.Имейте в виду, что когда объект восстанавливается из базы данных, он находится на стадии среднего возраста с точки зрения DDD.Вот как может выглядеть код:

// beginning 
Customer preferredCustomer = CustomerFactory.CreatePreferred();
customersRepository.Add(preferredCustomer);

// middle life
IList<Customer> valuedCustomers = customersRepository.FindPrefered();

// end life
customersRepository.Archive(customer);

Вы можете вызвать этот код прямо из своего приложения.Возможно, стоит скачать и посмотреть DDD Sample Evan . Единица работы * Обычно используется шаблон 1025 * для обработки транзакций и абстрагирования вашего ORM по вашему выбору.

4 голосов
/ 23 августа 2011

Посмотрите, что Стив Болен говорит по этому вопросу. Код для презентации можно найти здесь .

Я был на презентации и нашел информацию о том, как правильно моделировать репозитории.

0 голосов
/ 26 января 2018

Правильно ли я понимаю, что интерфейсы репозитория находятся в сборке домена, но реализации репозитория существуют на уровне персистентности?Уровень постоянства содержит ссылку на уровень домена, а не наоборот?

Я не согласен, скажем, система состоит из следующих уровней:

  • Уровень представления(выигрышные формы, веб-формы, asp.net MVC, WPF, php, qt, java,, ios, android и т. д.)
  • Бизнес-уровень (иногда называемый менеджерами или службами, здесь идет логика)
  • Уровень доступа к ресурсам (вручную или ORM)
  • Ресурс / Хранилище (СУБД, NoSQL и т. Д.)

Здесь предполагается, что чем выше вы, тем более изменчивыуровень (самый высокий уровень представления, а самый низкий ресурс / хранилище).Именно поэтому вы не хотите, чтобы уровень доступа к ресурсам ссылался на бизнес-уровень, а наоборот!Бизнес-уровень ссылается на уровень доступа к ресурсам, вы вызываете DOWN, а не UP!

Вместо этого вы помещаете интерфейсы / контракты в их собственную сборку, они вообще не имеют никакой цели на бизнес-уровне.

...