CQRS:查询和业务规则

问题描述 投票:1回答:1

我正在使用带有NodeJ的CQRS,DDD和Clean体系结构,在查询方面,我需要使用一些业务规则(计算,此处为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;
  };
}

查询不使用域层,因此我可以在哪里放置此业务规则?(也许以后在域层中的命令相同)

谢谢。

architecture domain-driven-design cqrs
1个回答
0
投票

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

如果您没有通过分离命令和查询模型看到很多价值的信息,那么您可能不需要使用CQRS,应该将其归一化为单个模型。 CQRS旨在用于您的命令模式与查询模式非常不同的场景。如果要在两个模型之间重复代码,则系统可能不是此模式的理想选择。

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

© www.soinside.com 2019 - 2024. All rights reserved.