背后的原则采用情况的建筑模式是你的独立查询和命令为不同的路径。理想情况下,您的持久性存储,可以读写/分区,但在我的情况下,有一个单一、规范化的数据库。

如果使用一个奥姆(它能够在我的情况),很明显,对象是使用当时发布的命令。但是,有关的所有各种查询,你需要跑到形状的数据(交互)对于用户界面,这是常见的做法沟的对象时这样做的查询方的呼叫?

我应该在哪里执行我也可与检查询和预测?觉ADO.NET (datareaders,交互,数据表,储存处)?有些查询是相当独特的,涉及很多同拉的一切都在一起。我不想非规范化的数据库查询,但我可以创造景(穷人的非正规化).

有帮助吗?

解决方案

我假设,通过呼叫你的意思是DDD的建筑模式aka CQRS, 不严格的传统 呼叫 原则。

我还是会使用它能够为您只读模式。有许多优势,例如未来和多的查询,懒/渴望的装载等。将优化DB闲聊。此外,它会更容易编写查询与奥姆如果UI允许用户本质上的更改其中的条款。

关于如何在技术上处理的只读模式,可以标志着一个实体 不可改变的 用它能够.你可以简单地标记出所有的模型实体不可改变的。此外,我不认为你可以更新预测在它能够这样,是另一个选择去为你只读模型(人请纠正我,如果我错了,因为我不是100%肯定的)。

关于丑陋或者不可能NH映射:NH可图的观点和存储程序,所以我认为这将收到使用这些当你需要。风景很可能更多一点的灵活存储程序只读方案,因为你的SQL将仍然是动态的。但是,如果你需要读写任何这些平的结构,我们的地图一家商店过程。

其他提示

最后,这个想法是,你应该使用任何使最简单的查询信道为您建立和维护。您再也不用担心更新,执行业务规则,维护数据的完整性,甚至处理负载(大部分)。所以,你可以自由选择,以前没有在表中的许多选项。

但NHibernate的仍然是一个不错的选择......它只是不再自动默认(它有时是Command侧)。

我们已经选择了使用城堡活动记录(这是在引擎盖下基于NHibernate的),主要是因为它有一个很好的功能,它会从一个类为您生成的表。这很好地适合我们,因为这里是我们的工作流程:首先,我们创建一个视图模型类。这个类是用于View的需求完全成型。然后,我们纪念的是视图模型与城堡活动记录属性。然后,我们要求活动记录生成在查询数据库类中的相应表格。这是我们发现快速获取服务于ViewModel类查询数据库表中最快的,流畅的方式。自动生成反映了现实,即表中存在的唯一原因是服务于视图。

我们正在使用EF为命令的一部分,以及用于查询链直ADO.NET => DTO的。优点:

1)的能力来优化SQL查询和使用高级DB存储功能不抽象成ORM层

2)减开销

但是,我们正在使用的分离只为要求苛刻的部分(搜索),其余依靠共同的实体框架模型。

有没有需要使用不同的方法来阅读你的数据库与更新数据库。 CQS简单地指出,命令,更新所述数据存储器应该是由从数据存储器中读出状态的查询是分开的。

您仍然可以使用NHibernate的从数据存储读取,但你可能要使它明显通过创建两个不同的类来封装数据访问。一类将有方法来读取(查询)的数据存储,所述其他类将有方法发出命令(添加,更新,删除)的数据存储区。

你所试图避免的是,从数据库中获取信息,然后在数据库中读出标记信息的方法。这应该是两个不同的方法调用。你不应该改变的状态,并从相同的方法返回的值。

我想保持ORM的单独的用于读取和写入,所以我将使用(我用):

<强> Nhibernate的作为命令 - 精美映射我的域模型

Dapper.net 作为查询 - 精美的地图我的DTO的,并允许felxibility如果查询是太复杂了。

他们是一对完美的夫妇就像汉·索罗和楚巴卡。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top