我读过 Evans、Nilsson 和 McCarthy 等书,了解领域驱动设计背后的概念和推理;但是,我发现很难将所有这些放在一个真实世界的应用程序中。缺乏完整的例子让我摸不着头脑。我找到了很多框架和简单的示例,但到目前为止还没有真正展示如何在 DDD 之后构建真正的业务应用程序。
以典型的订单管理系统为例,以订单取消为例。在我的设计中,我可以看到一个带有 CancelOrder 方法的 OrderCancellationService,它接受订单 # 和一个原因作为参数。然后它必须执行以下“步骤”:
- 验证当前用户是否具有取消订单的必要权限
- 从 OrderRepository 中检索具有指定订单 # 的订单实体
- 验证订单是否可能被取消(服务是否应该询问订单的状态以评估规则,或者订单是否应该具有封装规则的 CanCancel 属性?)
- 通过调用 Order.Cancel(reason) 更新 Order 实体的状态
- 将更新的订单保存到数据存储中
- 联系 CreditCardService 以恢复已处理的任何信用卡费用
- 为操作添加审核条目
当然,所有这些都应该发生在一个事务中,并且不应该允许任何操作独立发生。我的意思是,如果我取消订单,我必须恢复信用卡交易,我无法取消并且不执行此步骤。这,imo,建议更好的封装,但我不想在我的域对象(订单)中依赖 CreditCardService,所以这似乎是域服务的责任。
我正在寻找有人向我展示如何/应该如何“组装”的代码示例。代码背后的思考过程将有助于让我为自己连接所有的点。谢谢!