CQRS: запросы и бизнес-правила - PullRequest
1 голос
/ 30 января 2020

Я использую CQRS, DDD и чистую архитектуру с NodeJs, и в моей части запросов мне нужно использовать некоторые бизнес-правила (вычисление, здесь 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;
  };
}

В запросах не используется слой домена, поэтому где я могу разместить эти бизнес-правила? (возможно, позже то же самое в доменном слое для команд)

Спасибо.

1 Ответ

2 голосов
/ 31 января 2020

Одним из ключевых клиентов CQRS является то, что у вас есть отдельные модели для запросов и обновлений / команд. Ваши доменные объекты будут разделены, и к ним будут прикреплены отдельные бизнес-правила. Ключевым моментом здесь является то, что, если вы используете DDD, ваши запросы будут иметь слой домена, а не тот, который используется на стороне команды.

Если вы не видите много значения, имея Раздельные модели команд и запросов, то вам, вероятно, не нужно использовать CQRS, и вы должны нормализоваться в единую модель. CQRS предназначен для использования в сценарии ios, где ваши шаблоны команд сильно отличаются от шаблонов запросов. Если вы повторяете код между двумя моделями, то ваша система, вероятно, не является подходящим кандидатом для этого шаблона.

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

...