gpt4 book ai didi

nhibernate - 使用 ORM 时如何实现命令查询分离 (CQS)?

转载 作者:行者123 更新时间:2023-12-03 14:07:11 25 4
gpt4 key购买 nike

CQS 架构模式背后的原则是将查询和命令分成不同的路径。理想情况下,您的持久性存储可以读/写分区,但在我的情况下,有一个单一的规范化数据库。

如果您使用的是 ORM(在我的例子中是 NHibernate),很明显在发出命令时使用了 ORM。但是,您需要运行所有各种查询来为用户屏幕塑造数据(DTO),在执行 CQS 的查询端时放弃 ORM 是否常见?

我应该在哪里实现我的查询和 DTO 预测?直接 ADO.NET(数据读取器、dto、数据表、存储过程)?一些查询是非常独特的,并且涉及很多连接来将所有内容组合在一起。我不想为查询对数据库进行非规范化,但我可以创建 View (穷人的非规范化)。

最佳答案

我假设 CQS 你的意思是 DDD 架构模式又名 CQRS ,而不是严格意义上的传统 CQS原则。

我仍然会为您的只读模型使用 NHibernate。有许多优点,例如 future 和多查询、延迟/急切加载等......这将优化数据库的聊天性。此外,如果 UI 允许用户从本质上更改 where 子句,则使用 ORM 编写查询会更容易。

关于如何在技术上处理只读模型,您可以标记一个实体 immutable与NHibernate。您可以简单地将所有读取模型实体标记为不可变。此外,我认为您不能更新 NHibernate 中的预测,因此这是作为只读模型的另一种选择(如果我错了,请纠正我,因为我不是 100% 确定)。

关于丑陋或不可能的 NH 映射:NH 可以映射到 View 和存储过程,所以我认为在需要时使用它们会很好。对于只读方案, View 可能比存储过程更灵活一些,因为您的 SQL 仍然是动态的。但是,如果您需要对这些扁平结构中的任何一个进行读/写,我会映射到存储过程。

关于nhibernate - 使用 ORM 时如何实现命令查询分离 (CQS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com