gpt4 book ai didi

architecture - CQRS:查询和业务规则

转载 作者:行者123 更新时间:2023-12-05 03:55:42 25 4
gpt4 key购买 nike

我将 CQRS、DDD 和 Clean 架构与 NodeJ 一起使用,在我的查询端,我需要使用一些业务规则(计算,此处为 getNetRealEstateAssets())从我的 API 返回一些信息。

我有一个 GetTenantsQuery 和一个 GetTenantsHandler 类:

export default class GetPerformancesHandler {
async execute(query) {
const tenants = tenantRepository.find();

return tenants; // array of TenantQueryModel
}
}

class TenantQueryModel {

constructor(){
this.rents = [];
this.grossAssets = xxx;
this.liabilities = xxx;
}

getNetRealEstateAssets = () => {
if (!this.grossAssets || !this.liabilities) return null;

const round = (amount, roundLevel) => (amount / roundLevel).toFixed() * roundLevel;
let netRealEstateAssets = this.grossAssets - this.liabilities;
netRealEstateAssets =
netRealEstateAssets > 10000 ? round(netRealEstateAssets, 1000) : round(netRealEstateAssets, 100);

return netRealEstateAssets;
};
}

查询不使用域层,那么我可以把这个业务规则放在哪里?(也许稍后在命令的域层中相同)

谢谢。

最佳答案

CQRS 的主要租户之一是您拥有独立的查询模型与更新/命令模型。您的域对象将被分开,并且附加有单独的业务规则。这里的关键是,如果您使用 DDD,您的查询将有一个域层,只是与您的命令端不同。

如果通过分离命令和查询模型没有看到很多值(value),那么您可能不需要使用 CQRS,并且应该规范化为单个模型。 CQRS 旨在用于您的命令模式与您的查询模式非常不同的场景。如果您在两个模型之间重复您的代码,那么您的系统可能不适合此模式。

https://martinfowler.com/bliki/CQRS.html

关于architecture - CQRS:查询和业务规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59994404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com