■命令和查询责任分离 (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; }
【■命令和查询责任分离 (CQRS) 模式】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,
ICommandHandler,
ICommandHandler,
ICommandHandler,
ICommandHandler
{
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)
{
...
}
}
推荐阅读
- |为什么使用B+Tree?
- 滴滴|滴滴程维:扫描安全风险,责任落实到人,真正做到警钟长鸣
- 行程通信大数据行程卡累计查询超12亿次,UCloud优刻得提供云技术支持
- 五分钟法商学院|未年检机动车转让后发生交通事故,应由谁承担赔偿责任?
- Excel函数与VBA实例|向左查询只会vlookup函数就out了,这两组函数公式效率更高
- 工商|工商注册查询步骤有哪些?
- 何鸿燊何鸿燊逝世享年98岁 家人称继续完成父亲惠泽社会的责任
- []抖音小店订单物流轨迹如何查询?
- zol中关村在线不支持局域网?命令与征服:重制版将上线
- 社会责任支付宝社会责任报告:危中寻机100天 中国率先迈入数字生活时代
