在学习领域驱动设计时,我一直在整理以下解决方案(请注意,此排序是字典顺序的,而不是依赖关系的表示):
以下是每个项目的概要:
Domain.Models: 域实体和值对象(例如
Order
)Domain.Interfaces: 域服务接口和存储库接口(例如
IOrderService
,IOrderRepository
)Domain.Services: 领域服务接口的具体实现(例如
OrderService
)Infrastructure.Data: 存储库接口的具体实现(例如
OrderRepository
)Infrastructure.DependencyResolution: 依赖注入解析。
问题
现在我想提供非域服务。一个示例是用于发送电子邮件的电子邮件网关。我为此创建了以下项目:
Infrastructure.Components: 非域服务的具体实现
问题
我会将此类非域服务的接口放在哪里(例如, an IEmailGateway
)?
它需要可由Domain.Services项目访问(OrderService
可能需要您发送通知),所以它会进入Domain.Interfaces吗?我会说不,因为发送电子邮件不是特定于域的活动。