DAO/Repository/NHibernate 和处理边缘数据库案例

Posted

技术标签:

【中文标题】DAO/Repository/NHibernate 和处理边缘数据库案例【英文标题】:DAO/Repository/NHibernate And Handling Edge DB Cases 【发布时间】:2010-12-21 15:21:38 【问题描述】:

一直困扰着我的一件事是,我在书籍/博客中没有看到太多提及,那就是如何在一个真正不受 DAO 或存储库管辖的系统中处理数据库操作。我喜欢使用通用 DAO/Repositories 的方法来处理常见的 DB 操作,但是如何处理非实体的东西呢?例如,假设我正在构建一个系统,在某些情况下我需要调用存储过程来运行批处理操作并返回成功代码。或者,我只需要从杂项表中加载日期。或者,我想从表格中加载美国各州的列表。这些情况肯定会发生,而且它们实际上可能与系统中的实体或其他对象没有任何关系。在不放弃放弃像 NHibernate 之类的东西来手动使用 ADO.NET 来执行这些类型的操作的讨厌的“杂项”数据库类的情况下,OOP 人群中还有哪些其他标准方法?

【问题讨论】:

【参考方案1】:

绕过 DAO 并直接使用 ADO 连接器(或本机驱动程序)正是每个人都在做的事情,这并没有什么“讨厌”或错误的地方。如果这些确实是您的边缘案例,那么您期望什么样的框架?更糟糕的是,人们在他们的 DAO 周围使用各种奇怪的恶作剧来做一些很糟糕的事情,只是以“不要绕过 ”的名义。

我的意思是,如果您有一个存储过程,那么您显然已经确定 DB 不可知论已经不在了(无论如何这是一个被高估的目标),那么为什么对使用 ADO.Net 有疑虑呢?只需在代码中使其非常明确,不要隐藏它。大声而自豪地说:“我正在使用数据库,我不关心任何人的想法!”。哦,请确保它仍然与您的其他逻辑分开。我不希望我的单元测试因为你的存储过程而变慢。

【讨论】:

以上是关于DAO/Repository/NHibernate 和处理边缘数据库案例的主要内容,如果未能解决你的问题,请参考以下文章