關於域基礎設施是確定把它們想象成:DDD領域專用/通用基礎設施
- 一般:如何發送電子郵件/讀取配置文件,等等。
- 具體:如何發送激活碼給新用戶(域實體)
在哪裏,如果我想依賴:
個域 <參考>一般基礎設施(用於記錄,一般例外,等..)
特定的基礎設施 <參考>一般基礎設施&域(獲得基礎設施相關的操作接口,如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"));
}
因此,您認爲基礎架構項目不應該引用域項目,而應該獨立於任何域(無域基礎架構)工作? – user997923