零度编程命令和查询责任分离 (CQRS) 模式( 三 )
以下代码显示了从 CQRS 实现(它对读取和写入模型使用不同的定义)的示例中提取的一些内容 。 模型接口不规定基础数据存储的任何功能 , 而且它们可以不断变化并进行细微调整 , 因为这些接口是独立的 。
下面的代码显示读取模型定义 。
// Query interface
namespaceReadModel
{
publicinterfaceProductsDao
{
ProductDisplay FindById( intproductId ) ;
ICollection FindByName( stringname ) ;
ICollection FindOutOfStockProducts( ) ;
ICollection FindRelatedProducts( intproductId ) ;
}
publicclassProductDisplay
{
publicintId { get; set; }
publicstringName { get; set; }
publicstringDeion { get; set; }
publicdecimalUnitPrice { get; set; }
publicboolIsOutOfStock { get; set; }
publicdoubleUserRating { get; set; }
}
publicclassProductInventory
{
publicintId { get; set; }
publicstringName { get; set; }
publicintCurrentStock { get; set; }
}
}
系统允许用户对产品制定费率 。 应用程序代码使用以下代码中所示的 RateProduct 命令执行此操作 。
publicinterfaceICommand
{
Guid Id { get; }
}
publicclassRateProduct: ICommand
{
publicRateProduct( )
{
this.Id = Guid.NewGuid;
}
publicGuid Id { get; set; }
publicintProductId { get; set; }
publicintRating { get; set; }
publicintUserId { get; set; }
}
系统使用 ProductsCommandHandler 类处理应用程序所发送的命令 。通常 , 客户端通过消息传递系统(如队列)将命令发送到域 。 命令处理程序接受这些命令 , 并调用域接口方法 。 每个命令的粒度旨在减少冲突请求 。 下面的代码显示了 ProductsCommandHandler 类的概述 。
publicclassProductsCommandHandler:
ICommandHandler< AddNewProduct>,
ICommandHandler< RateProduct>,
ICommandHandler< AddToInventory>,
ICommandHandler< ConfirmItemShipped>,
ICommandHandler< UpdateStockFromInventoryRecount>
{
privatereadonlyIRepository repository;
publicProductsCommandHandler( IRepository repository)
{
this.repository = repository;
}
voidHandle( AddNewProduct command)
{
...
}
voidHandle( RateProduct command)
{
varproduct = repository.Find(command.ProductId);
if(product != null)
{
product.RateProduct(command.UserId, command.Rating);
repository.Save(product);
}
}
voidHandle( AddToInventory command)
{
...
}
voidHandle( ConfirmItemsShipped command)
{
...
}
voidHandle( UpdateStockFromInventoryRecount command)
{
...
}
【零度编程命令和查询责任分离 (CQRS) 模式】}
推荐阅读
- 博科园|太好了,在硅光电子芯片上实现:可编程的电路、可擦除的元件!
- 编程小火车|你在群里提的技术问题没人回答!是为什么?因为没注意这 4 点
- 哈工新欧液压测试台|labview组态编程的五大经验总结,助你开发过程事半功倍
- CSDN|如何在容器内高效编程?
- CSDN|“编程能力差,90%输在了选择上!”CTO:多数程序员都是瞎努力!
- 品影轩|5G引爆缘计算,下一个万亿市场来临:阿里云CDN边缘轻量编程环境
- 钛媒体APP|专访罗布乐思段志云:游戏、编程、出海多路并进
- ##还在吹嘘编程语言的应该就只有小白和培训机构了吧
- 「数字」全国政协委员丁磊:推动编程教育纳入我国基础教学体系
- zol中关村在线不支持局域网?命令与征服:重制版将上线