【发布时间】:2014-09-20 13:33:28
【问题描述】:
我正在试验 DDD + CQRS,我不明白如何处理这个域逻辑重复问题:
首先,关于跨域重复:
场景 1: 假设我有一些处理办公室员工的应用程序。我有 3 个有界上下文:程序员部门、QA 部门和审计部门。每个 BC 都有自己的 AR:“程序员”、“测试人员”、“工人”。它们有 99% 的不同,每个都有不同的逻辑,但是,每个都有“姓名”、“姓氏”和一个简单的方法“getFullName”,它将这两者连接起来。
问题 1:我如何(并且应该?)使通用方法在每个 AR 中不重复?
最简单的答案可能是创建一些共享的“人类”类,并让这 3 个 AR 派生自它,但这与 DDD 的想法背道而驰,因为“QA 部门”永远不需要“getFullName”方法,而是需要一些其他“共享”方法。因此,此解决方案将使用未使用的方法向域发送垃圾邮件。
现在关于 CQRS 代码重复:
场景 2: 数据库包含发票。每张发票都有字段“sum”和“tax”。在“显示发票”页面中,我需要显示含税的发票金额。因此,在我的读取模型中,我需要执行“total = sum + tax”来将其展示给最终用户。但是,用户可以按“批准”按钮,比方说,它应该在其他数据库(会计或其他数据库)中注册发票金额。因此,在我的写入模型中,我将再次需要执行“total = sum + tax”。
问题 2:我如何(并且应该?)删除这种重复?
当然,这是一个简单的场景,但在分析了我的一些现实生活应用程序后,我发现使用 CQRS 需要在不同的地方进行大量重复,因为有很多地方是根据数据计算最终结果的存储在数据库中,并在查询和命令操作中完成。
有什么想法吗?我错过了什么吗?
【问题讨论】:
-
场景 1 - 我只是做复制,如果相同的方法在 3 个有界上下文中,每个可能都有单独的更改理由。
标签: language-agnostic domain-driven-design cqrs