我正在尝试使用DDD + CQRS,并且我不知道如何处理这些领域逻辑复制的问题:
首先,关于跨域的复制:
场景1:假设我有一个应用程序来处理办公室员工。 我有3个限界上下文:程序员部门,QA部门和审计部门。 每个BC都有自己的AR:“Programmer”,“Tester”,“Worker”。 它们99%不同,每个AR中有不同的逻辑,但是每个AR都有“姓名”,“姓氏”和一个简单的方法“getFullName”,该方法将这两个名称连接起来。
问题1:我应该如何避免AR中重复的常规方法? 最简单的答案可能是创建一些共享的“Human”类,并使这3个AR从中派生,但这与DDD的思想相违背,因为“QA Department”可能永远不需要“getFullName”方法,但需要其他“共享”方法。 因此,这种解决方案会使域受到未使用方法的垃圾邮件。
现在关于CQRS代码复制:
场景2:数据库包含发票。每张发票都有“总数”和“税收”字段。在“显示发票”页面中,我需要显示带税收的发票总额。因此,在我的读模型中,我需要执行“total = sum + tax”才能向最终用户显示它。但是,用户可以按“批准”按钮,该按钮应该在某个其他数据库(会计或其他)中注册发票金额。因此,在我的写模型中,我将再次需要执行“total = sum + tax”。
问题2:我应该如何避免这种重复? 当然,这是一个简单的情况,但是在分析一些我的实际应用程序后,我发现使用CQRS将需要在不同的地方进行大量的重复,因为有很多地方的最终结果都是从存储在数据库中的数据中计算出来的,并且这是在查询和命令操作中完成的。
任何想法吗? 我错过了什么吗?
首先,关于跨域的复制:
场景1:假设我有一个应用程序来处理办公室员工。 我有3个限界上下文:程序员部门,QA部门和审计部门。 每个BC都有自己的AR:“Programmer”,“Tester”,“Worker”。 它们99%不同,每个AR中有不同的逻辑,但是每个AR都有“姓名”,“姓氏”和一个简单的方法“getFullName”,该方法将这两个名称连接起来。
问题1:我应该如何避免AR中重复的常规方法? 最简单的答案可能是创建一些共享的“Human”类,并使这3个AR从中派生,但这与DDD的思想相违背,因为“QA Department”可能永远不需要“getFullName”方法,但需要其他“共享”方法。 因此,这种解决方案会使域受到未使用方法的垃圾邮件。
现在关于CQRS代码复制:
场景2:数据库包含发票。每张发票都有“总数”和“税收”字段。在“显示发票”页面中,我需要显示带税收的发票总额。因此,在我的读模型中,我需要执行“total = sum + tax”才能向最终用户显示它。但是,用户可以按“批准”按钮,该按钮应该在某个其他数据库(会计或其他)中注册发票金额。因此,在我的写模型中,我将再次需要执行“total = sum + tax”。
问题2:我应该如何避免这种重复? 当然,这是一个简单的情况,但是在分析一些我的实际应用程序后,我发现使用CQRS将需要在不同的地方进行大量的重复,因为有很多地方的最终结果都是从存储在数据库中的数据中计算出来的,并且这是在查询和命令操作中完成的。
任何想法吗? 我错过了什么吗?