asp.net-mvc-3 - 抛弃 ActiveRecord 和 NHibernate——如何重新架构?

标签 asp.net-mvc-3 nhibernate architecture castle-activerecord

我有一个 MVC3 NHibernate/ActiveRecord 项目。该项目进展顺利,我的模型对象(主要是一个由三四个类组成的巨大层次结构)得到了一些使用。

我的应用程序是基于分析的;我存储层次结构数据,然后将其切片,以图表形式显示等,因此实际关系并没有那么复杂。

到目前为止,我还没有从 ORM 中受益匪浅;它使查询变得容易(ActiveRecord),但我经常需要比完整对象更少的信息,并且我需要通过复杂的多次选择和对集合的迭代来编写“硬”查询 - 原始 SQL 会更快、更干净。

所以我正在考虑在这种情况下放弃 ORM,并返回到原始 SQL。但我不确定如何重新构建我的解决方案。我应该如何处理数据库层?

  • 我是否仍然应该为每个模型分配一个类,并使用静态方法来查询对象?或者我应该有一个代表数据库的类?
  • 我应该在 ActiveRecord 下编写自己的层(或我自己的类似 ActiveRecord 的实现)以保持现有代码或多或少的健全性吗?
  • 我是否应该将 ORM 方法(例如保存/删除)合并到我的模型类中?
  • 我应该更改表结构(每个类一个表,包含所有字段)吗?

如有任何建议,我们将不胜感激。我正在尝试找出最佳的架构和设计。

最佳答案

许多人,包括我自己,认为 ActiveRecord 模式是一种反模式,主要是因为它破坏了 SRP 并且不允许 POCO 对象(将您的域与特定 ORM 紧密耦合)。

话虽如此,对于简单的 CRUD 操作,你无法击败 ORM,因此我会为此类工作保留某种 ORM。只需重新架构您的应用程序,以使用 POCO 对象和某种类型或存储库模式以及另一个项目中的 ORM 实现细节。

对于您的“硬”查询,我会考虑使用小型 ORM(例如 DapperPetaPocoMassive )为每个 View 创建一个类,以使用您自己的原始 sql 查询对象。

关于asp.net-mvc-3 - 抛弃 ActiveRecord 和 NHibernate——如何重新架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396241/

相关文章:

asp.net-mvc-3 - 提交后的mvc3复选框值

c# - NHibernate 查询使用 Criteria-api 返回未映射的对象

architecture - 设计一个徽章系统,在哪里触发业务逻辑?在代码或存储过程中?或两者?

java - 企业服务总线的好处

asp.net-mvc-3 - MVC3 : button to send both form (model) values and an extra parameter

asp.net - MVC3 asp.net Html.AntiForgeryToken() 问题,而用户具有多个具有相同表单的选项卡

asp.net-mvc-3 - Entity Framework 4.1 代码优先的 SQL Server 2008 连接字符串

NHibernate 和 Spring.NET 的结合在企业级应用中真的很有帮助!

Windows 服务应用程序中的 NHibernate session 管理

jakarta-ee - 2层架构到底是什么?