Шаблон проектирования на основе домена - доступ к хранилищу из домена - PullRequest
6 голосов
/ 07 марта 2011

Я работал над применением шаблона проектирования на основе домена к нашему веб-приложению. Одна из проблем, с которой мы столкнулись, - избегать использования репозитория из сущности.

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

Должны ли мы использовать «сервисный» или «прикладной» уровень в этих случаях (у нас их много)? Есть ли лучший способ обойти эту проблему?

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

Да, я бы порекомендовал создать сервис для отправки электронной почты.Вы можете создать интерфейс для взаимодействия со службой в том же проекте, что и модель домена, но обеспечить реализацию службы в отдельном проекте, чтобы не было жесткой зависимости между моделью и службой.Зависимость обратная - от сервиса к модели.Это также создает лучшую настройку для реализации модульных тестов, чтобы гарантировать, что ваша служба вызывается при непредвиденных обстоятельствах, так как теперь вы сможете смоделировать службу в своих модульных тестах.

Единственное, чтоОсталось сделать, чтобы убедиться, что ваш сервис внедряется каждый раз, когда создается один из этих типов объектов.Таким образом, вы отложите создание объекта либо в хранилище.Или, что еще лучше, используйте инфраструктуру внедрения зависимостей, чтобы разрешить зависимость для вас.

3 голосов
/ 08 марта 2011

Домен должен быть невежественным.Вы не должны «разговаривать с хранилищем» изнутри.

В вашем сценарии - Я бы поднял событие домена (например, «Клиент что-то покупает») и обработал бы отправку электронной почты извне.

...