Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nservicebus 用于查询读取模型的存储无关选项_Nservicebus_Cqrs - Fatal编程技术网

Nservicebus 用于查询读取模型的存储无关选项

Nservicebus 用于查询读取模型的存储无关选项,nservicebus,cqrs,Nservicebus,Cqrs,当使用CQR和事件源时——我想知道,如果我的读取模型是由远程事件处理程序而不是在我的演示项目中构建的,那么我可以选择哪些选项来不可知地查询它们 我正在使用NServiceBus发送命令和发布事件,并且我已经配置了一个应用程序项目来侦听事件并在RavenDB中构建读取模型 我希望从RavenDB读取我的演示项目,但这会将我的演示层锁定为使用RavenDB或我的事件侦听器使用的任何其他内容,我希望保持演示层不可知 我最初考虑使用NServiceBus请求/响应,但我读到的各种东西都反对这种做法 这有

当使用CQR和事件源时——我想知道,如果我的读取模型是由远程事件处理程序而不是在我的演示项目中构建的,那么我可以选择哪些选项来不可知地查询它们

我正在使用NServiceBus发送命令和发布事件,并且我已经配置了一个应用程序项目来侦听事件并在RavenDB中构建读取模型

我希望从RavenDB读取我的演示项目,但这会将我的演示层锁定为使用RavenDB或我的事件侦听器使用的任何其他内容,我希望保持演示层不可知

我最初考虑使用NServiceBus请求/响应,但我读到的各种东西都反对这种做法

这有什么选择吗

根据评论编辑

我所做的是在ravendb中构建读取模型,使用一个单独的运行过程来侦听事件并保存结果。
我发现检索这些构建模型的结果的唯一选项是将我的表示对象(也称为WebAPI)连接到ravendb。这就是我试图避免的

为什么?

如果我想启动20个web api实例来平衡请求,那么每个实例都必须连接到ravendb——除了我已经连接的许多读取模型构建过程之外。使ravendb成为瓶颈

理想情况下,我希望做的是从我的web api向应用程序队列发送数据请求,然后等待数据以回复的形式返回。这样,我根本不关心我的应用程序进程在做什么,也不关心它们如何存储数据,我只是获取数据

关于这种方法,我读过两篇文章-

这个说不要这样做

这一条说去做吧

如果你做得对,你就选择了一种非常专注于手头阅读任务的阅读模式。除非你认为你要换掉它,直接使用产品就行了!对于关系读取模型,不要使用简单的SQL接口(例如jdbc、ado.net)。对图形模型使用Cypher。对键值存储使用本机API。不要再添加另一个抽象概念;这就是将读写分离的首要目的。

您可以使用查询处理程序或良好的旧存储库(而不是DDD存储库)。谢谢,存储库只是固定数据源上的一个面具——我必须迁移数据源,保持相同的repo,而且从来没有宣传说的那么容易。我找到的查询处理程序的所有示例都可以归结为repo和服务器上的查询数据访问。也许您可以提供一个使用基于消息的查询处理程序的示例?首先,正确的存储库模式仅适用于案例视图模型中的应用程序对象,因此您可以在需要时真正切换数据源,因为您还需要一个完全不同的repo实现。查询处理程序直接位于查询数据源的DAL中。它们也返回视图模型,需要为不同的数据源重写。但在这两种情况下,表示层都与持久性分离,这正是您想要的。我很喜欢查询处理程序的想法,这是我不知道的,但我真正想要的是某种方式,不让我的表示过程访问数据库。也许有点贪婪。@Charles你是说你的阅读模型甚至不访问存储库?这是一个很好的观点-只有表示对象才确切知道他需要什么阅读信息,他应该只得到他需要的