gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:32:36 26 4
gpt4 key购买 nike

我有一个 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/

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