Что касается доменной инфраструктуры, можно ли думать о них как о:
- Общие сведения: как отправить электронное письмо / прочитать файл конфигурации и т. Д.
- Определенно: как отправитькод активации для нового пользователя (сущности домена)
Где, если я думаю о зависимостях:
Домен <Ссылки> Общая инфраструктура (для ведения журнала, общих исключений и т. Д.)
Специальная инфраструктура <Ссылки> Общая инфраструктура и домен (чтобы получить интерфейсы операций, связанных с инфраструктурой, такие как IActivationCodeSender и иметь возможность реализовать EmailActivationCodeSender & SmsActivationCodeSender )
Мой прикладной уровень в этом случае будет ответственным за передачу (DI разрешено) желаемого метода активации в мою сущность домена, скажем:
User.Register(IActivationCodeSender activationCodeSender)
{
// Register user and generate activation code 1234
...
activationCodeSender.Send(this, "1234");
}
Это плохо?должен ли я вместо этого работать над своей (общей) инфраструктурой, чтобы убедиться, что она поддерживает отправку смс / электронной почты в едином порядке (боюсь, что в таких случаях может возникнуть сложность для моей общей инфраструктуры) и удалить эту конкретную инфраструктуру вощущение, что такой уровень будет смешивать бизнес-логику с операциями, связанными с инфраструктурой?поэтому вместо этого я бы использовал следующее:
Две (общие) реализации для INotificationSender ; EmailNotificationSender и SmsNotificationSender
User.Register(INotificationSender activationCodeSender)
{
// Register user and generate activation code 1234
...
// this.NotificationAddressInfo includes email address and mobile phone #
activationCodeSender.Send(new Notification(this.NotificationAddressInfo, "Your activation code is 1234"));
}