【发布时间】:2017-09-19 08:54:52
【问题描述】:
请参阅以下文章:https://www.codeproject.com/Articles/555855/Introduction-to-CQRS 和 http://enterprisecraftsmanship.com/2015/04/20/types-of-cqrs/。这是一些代码:
public class CustomerRepository
{
public void Save(Customer customer) { /* … */ }
public Customer GetById(int id) { /* … */ }
public IReadOnlyList<CustomerDto> Search(string name) { /* … */ }
}
它们都将 GetByID 描述为命令,即在这两种情况下,方法返回域对象(客户)而不是 DTO 对象(客户DTO)。为什么是这样? GetByID 从数据库返回数据。它应该是一个查询,即返回 CustomerDTO,不是吗?
25/09/17 更新
假设我从数据库中检索了一个产品。然后我想在产品上运行一些方法(更改实例变量),然后将更改持久化回数据库。我会这样做吗:
ProductDTO productDTO = ProductRepository.GetProduct(1);
DomainProduct domainProduct = AutoMapper.Mapper.Map<DomainProduct>(DomainProduct);
domainProduct.RunSomeMethod();
或者这个:
DomainProduct domainProduct = ProductRepository.GetProduct(1);
domainProduct.RunSomeMethod();
第一个代码片段可以防止写入数据库的命中,(我认为 CQRS 是为了防止写入数据库的读取命中)?但是,GetByID 也会命中写入数据库。
哪个片段支持 CQRS?两者都有?
【问题讨论】:
标签: c# domain-driven-design cqrs