ドメイン駆動設計を学びながら、次の解決策をまとめました (この順序は辞書順であり、依存関係を表すものではないことに注意してください)。
以下、各プロジェクトの概要です。
Domain.Models: ドメイン エンティティと値オブジェクト (例:
Order
)Domain.Interfaces: ドメイン サービス インターフェイスとリポジトリ インターフェイス (例
IOrderService
:IOrderRepository
)Domain.Services: ドメイン サービス インターフェイスの具体的な実装 (例:
OrderService
)Infrastructure.Data: リポジトリ インターフェイスの具体的な実装 (例:
OrderRepository
)Infrastructure.DependencyResolution: 依存性注入の解決。
問題
今、私はドメイン以外のサービスを提供したいと考えています。例としては、電子メールを送信するための電子メール ゲートウェイがあります。このために、次のプロジェクトを作成しました。
Infrastructure.Components: 非ドメイン サービスの具体的な実装
質問
このような非ドメイン サービス (たとえば、IEmailGateway
) のインターフェイスはどこに配置しますか?
Domain.Servicesプロジェクトからアクセスできる必要があるため(OrderService
通知を送信する必要がある場合があります)、Domain.Interfacesに入れますか? メールの送信はドメイン固有のアクティビティではないため、NO と言います。