我正在采用 DDD 概念来设计我们的下一个项目,更具体地说是 CQRS。
在阅读了很多东西之后,我现在正在尝试实现一个简单的概念证明。
问题是我刚开始就被卡住了:p
我正在尝试将此方法应用于简单的用户注册过程,其中步骤是:
- 用户填写注册表并提交请求
- 应用程序创建用户
- 该应用程序对用户进行身份验证(自动登录)
- 应用程序向用户发送验证电子邮件
- 该应用程序使用确认消息将用户重定向到其他地方
从实现的角度来看,到目前为止我得到的是:
- 控制器操作将请求数据映射到 RegisterCommand 对象
- 控制器动作要求命令总线处理 RegisterCommand
- 命令处理程序(UserService)“注册”方法创建一个新的用户对象(无论是通过新命令还是工厂对象)
- 模型引发 RegisterEvent
- 命令处理程序要求存储库存储新的用户对象
就是这样,控制器操作对此一无所知。
所以,我的猜测是,由于这个上下文中的所有事情都必须同步完成(除了电子邮件发送),我可以使用直接/同步命令总线,并且在控制器操作中,在命令总线调用之后,我可以查询对于只读用户(查询数据库),如果它存在,则假设一切顺利,所以我可以给用户一条确认消息。
由事件处理程序处理的自动登录过程。
假设这是正确的,如果出现问题怎么办,如何以正确的信息通知用户?
我们可以在互联网上找到的文章中经常使用一个常见的例子:客户使用过期的信用卡支付订单。系统接受请求,通知用户一切正常,但用户在几分钟后收到一封电子邮件,告诉他他的订单无法处理。
好吧,这种情况在许多情况下是可以接受的,但对于其他一些情况,这是不可能的。那么处理这些用例的例子在哪里呢?:p
谢谢 !