2

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

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

到目前为止,我还没有从 ORM 中得到太多好处;它使查询变得容易(ActiveRecord),但与完整对象相比,我通常需要更少的信息,并且我需要通过复杂和多次选择以及对集合的迭代来编写“硬”查询——原始 SQL 会更快、更清晰。

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

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

任何意见,将不胜感激。我正在尝试找出最好的架构和设计。

4

1 回答 1

3

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

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

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

于 2012-09-12T23:43:15.963 回答