我正在建立一个邀请系统,管理员只能在其中邀请
此流程涉及两个实体Invitation
和User
。
这似乎表明Invitations
和User
应该添加到两个单独的聚合中。
然后,实现上述逻辑的唯一方法是使用域服务,例如IInvitationService
。 我可以吗?
此界面可能有两种方法:
public interface IInvitationService
{
Task<Result> Create(Invitation invitation, CancellationToken token);
Task<Result> Delete(Invitation invitation, CancellationToken token);
}
最后,如果我采用服务方式,将有两种可能的方式来创建邀请。
IInvitationRepository.Create()
IInvitationService.Create()
您不觉得这令人困惑吗?
答案 0 :(得分:0)
然后,实现上述逻辑的唯一方法是使用域服务,例如IInvitationService。我说的对吗?
这里似乎有些错误。简而言之,domain-driven-design并不意味着我们放弃了面向对象设计的原理。
逻辑通常在变化的聚合根中实现。引入聚合模式的部分目的是使查找负责更改的代码更加容易-而不是将相同的代码分散在整个模型中,您只需考虑状态更改发生的位置并知道在哪里寻找代码。
聚合根本身仅知道其自身状态-执行更改所需的任何其他信息都作为参数传递给它。
因此,我通常不会期望您到目前为止所描述的模型部分都需要“域服务”。
域服务可能会发挥作用的情况是,对一个聚合的更改取决于另一个聚合的最新状态。例如,如果对“邀请”的特定更改取决于“用户”的当前状态,则您可以将邀请计算方法传递给负责计算更改的邀请方法,该域服务可以访问用户状态的缓存副本。 / p>
关于创建...,创建模式是很奇怪。 Udi Dahan's post是一个很好的起点。