Tag: cqrs

在CQRS中注册EventHandler

我正在尝试使用CQRS和DDD模拟购买域,我知道我在域中引发事件但我不知道在我使用命令时在哪里注册它们。 应该在命令处理程序中注册事件处理程序吗? 或者我误解了一些东西。 这是我的过程,你可以帮助建模吗? 最终确定采购订单命令,比命令处理程序最终确定订单(从存储库获取订单,更改其状态并保存回db),订单最终事件发生在域模型中,而不是事件处理程序使用id及其行项找到此订单,查找它供应商联系信息(可能是电子邮件甚至是外部服务)并通知他新的采购订单。 我的命令和命令处理程序在应用程序层中(事件处理程序也应该在这里?)。 域层中的域模型,事件和IRepositories。 基础架构层中的存储库实现。 域模型(跳过大多数属性): public class PurchaseOrder { public PurchaseOrder(int purchaseOrderID, int supplierID, bool isOrderFinalized) { PurchaseOrderID = purchaseOrderID; SupplierID = supplierID; IsOrderFinalized = isOrderFinalized; } public int PurchaseOrderID { get; private set; } public int SupplierID { get; private set; } public bool IsOrderFinalized { get; private set; } […]

dependency injection:ASP vNext。 这是怎么回事?

因此,在我基于CQRS的错误跟踪Web-API中,我在进行unit testing之前重构了我的代码(诚然,应该首先考虑); 我有这个类和构造函数: public class BugCommandHandler : IBugCommandHandler { private BugContext db; public BugCommandHandler(BugContext bugContext) { db = bugContext; } //Interface implementation } 在我的控制器中,我有这个: public class BugsController : Controller { private IBugCommandHandler commandHandler; private BugContext db; public BugsController(BugContext bugContext, IBugCommandHandler bugCommandHandler) { db = bugContext; commandHandler = bugCommandHandler; } } 最后,在我的Startup类中,我已经注入了依赖项 services.AddSingleton(); 我的unit testing和手动集成测试都工作正常,因为我在没有DI的情况下手动调用它。 BugCommandHandler实现现在如何工作,就像它在构造函数中使用数据库上下文一样被调用( […]

EventStore + RavenDB,没有反序列化正确

尝试使用RavenDB的JOliver CommonDoman / EventStore 3.0,它可以很好地存储事件,但是当尝试使用IRepository.GetById()加载聚合根时,反序列化会出现问题。 给出错误消息“无法将类型为’Raven.Abstractions.Linq.DynamicList’的对象’转换为’System.Collections.Generic.List`1 [EventStore.EventMessage]’。” 在DocumentObjectSerializer.cs, public T Deserialize(object document) { Logger.Verbose(Messages.DeserializingStream, typeof(T)); return (T)document; } 其中T是List 我用来获取文档的代码是这样的: var r = _repository.GetById(command.Id); //where _repository is CommonDomain.Persistence.EventStore.EventStoreRepository //the EventStore wire up is, return Wireup.Init() .UsingRavenPersistence(“RavenDB”) .UsingSynchronousDispatchScheduler(bus) .Build();

在ServiceStack中动态创建操作和服务

我正在开发一个ServiceStack项目,它要求我收集一个命令列表,我有200多个命令,并为每个命令创建一个操作和服务。 基本上我正在制作一个命令API,它允许用户在不使用UI的情况下发送命令(暴露我的命令)。 我正在尝试做的一个简单示例:(应用程序启动) Gather all commands (with some exemptions) for each command make an operation and service for that command map the commands attributes to the new operation and service 我遇到的问题是创建运营和服务。 我不确定它是否在ServiceStack框架内得到支持,以允许动态创建服务和操作,但我真的没有找到一种方法来做到这一点。 为了澄清,动态我的意思是在应用程序启动期间从列表中创建命令,而不是动态创建它们。 有人可以为我的理解提供一些启示吗? 我感谢任何帮助, 麦克风

ViewModels,CQRS和实体

我试图了解如何使用视图模型,命令和数据库实体 目前我认为这之间有很多手动映射,我不确定是否应该使用像AutoMapper这样的工具来映射ViewModel Command Entity当有很多属性时(比如10-15) )。 拿这个例子(在记事本中快速编写,可能无法编译 – 在我的实际应用中,我使用dependency injection和IoC): public class Student { public int Id { get; set; } public string Name { get; set; } public string AnoterProperty { get; set; } public string AnoterProperty2 { get; set; } public string AnoterProperty3 { get; set; } public string AnoterProperty4 { get; set; } […]

CQRSvalidation和唯一性

在我的CQRS架构中,我想validation当我发送一个InsertSettingCommand(设置是一个键/值对象)时,我想检查我的数据库中是否存在该键。 如果我理解CQRS和validation,它说只有在validation某些格式化内容时才会在客户端执行validation,例如检查电子邮件是否遵循某种语法或客户的名称是否为空。 但在我的情况下,我需要查询我的数据库,看它是否存在,但我不知道在客户端查询我的读取存储是否正确? 或者我应该在我的域名中调用我的阅读商店? 然后抛出一个InsertSettingDuplicated事件? 那么在CQRS环境中我最好的方法是什么呢? 有人谈论补偿行动吗? 它能帮助我吗? 谢谢。

将validation添加到MediatR行为管道?

我正在使用内置容器ASP.NET Core和支持“行为”管道的 MediatR 3: public class MyRequest : IRequest { // … } public class MyRequestHandler : IRequestHandler { public string Handle(MyRequest message) { return “Hello!”; } } public class MyPipeline : IPipelineBehavior { public async Task Handle(TRequest request, RequestHandlerDelegate next) { var response = await next(); return response; } } // in `Startup.ConfigureServices()`: services.AddTransient(typeof(IPipelineBehavior), […]

如何使CQRS适应项目?

我遇到了一个名为CQRS(命令查询责任隔离)的新术语,该术语指出概念模型应该拆分为命令模型和查询模型,作为命令和查询在同一模型中发生的典型CRUD模型。 这篇文章有所有的理论信息。 我不明白我应该如何在ASP.net MVC3,EF 4.3和jQuery的项目中实现它。 谁能建议我如何在我的项目中实际实现它?

应用CQRS – 是否需要对薄读取层进行unit testing?

鉴于实现CQRS的一些建议提倡相当接近金属的查询实现,例如直接针对数据库(或者可能是基于LINQ的ORM)的ADO.NET查询,尝试unit testing是错误的他们? 我想知道它是否真的有必要吗? 我对此事的看法: 提供可模拟的“薄读取层”的额外架构复杂性似乎与将建筑仪式保持在最低限度的建议的本质相反。 有效覆盖用户可能构成的每个查询角度的unit testing数量是可怕的。 具体来说,我正在ASP.NET MVC应用程序中尝试CQRS,并且想知道是否打扰unit testing我的控制器操作方法,或者只是测试域模型。 提前谢谢了。

Autofac解决CQRS CommandDispatcher中的依赖关系

我正在尝试实现一个简单的CQRS应用程序示例。 这是我的“命令”部分的结构: public interface ICommand { } //base interface for command handlers interface ICommandHandler where TCommand: ICommand { void Execute(TCommand command); } // example of the command public class SimpleCommand: ICommand { //some properties } // example of the SimpleCommand command handler public class SimpleCommandHandler: ICommandHandler { public void Execute(SimpleCommand command) { //some logic } […]