域驱动设计应用服务

时间:2011-03-27 10:46:00

标签: c# asp.net-mvc domain-driven-design

我对DDD中的应用程序服务有疑问。例如,我有一条规则,当用户确认注册时,会发生以下操作:

  1. 用户帐户已更新,以便他可以登录系统。
  2. 初始化用户余额。
  3. 用户收到确认信已确认。
  4. 鉴于应用程序服务SecurityAppService,它可以在调用其方法ConfirmRegistration()时包含以下工作流程:

    1. 调用域SecurityService以更新用户的帐户。
    2. 调用域AccountingService以初始化用户余额。
    3. 致电基础设施EmailService向用户发送电子邮件。
    4. 问题如下。从SecurityAppService调用AccountingService是否合法?或者我应该将其包含在对SecurityService的调用中?

2 个答案:

答案 0 :(得分:3)

您可以使用CQRS模式。

UserManager具有注册(用户用户)方法。他将添加用户并引发AddUserEvent。 AccountService和EmailService实现EventHandlers并通过EventHandlerArgument接收User对象。

因此,SecurityService不知道其他服务,所有这些服务都是独立的。

答案 1 :(得分:2)

恕我直言,答案是肯定是合法的。 允许服务在适当时调用其他服务。在特定示例中,它绝对是您想要做的事情。真正的问题是你如何管理依赖。使用DI可以解耦两个实现之间的直接关系。