C#NHibernate架构,三层应用

时间:2010-12-13 00:10:46

标签: c# nhibernate architecture unit-of-work

我需要一些建议如何在表示层中解耦nHibernate依赖项。目前,我们有一个三层C#winforms应用程序,包括(简化)以下层;

  • 用户界面(UI)
  • 商业逻辑(BAL)
  • 数据访问逻辑(DAL)

我们正在将此应用程序迁移到ORM(nHibernate),并且理想情况下只想让DAL引用nHibernate。我们还希望使用nHibernate中包含的“工作单元”功能,采用“每会话会话”方法。

为了实现这一点,我们需要在UI中创建和打开会话,通过BAL将会话传递给DAL,但是如果不在BAL和DAL中创建对nHibernate的依赖,我们就无法实现这一点。

任何建议都将不胜感激。我们应该如何构建体系结构以避免在UI和BAL中对nHibernate的任何引用。有什么想法吗?

我还必须补充一点,我们不希望UI也有对DAL的引用。

UI => BAL => DAL

4 个答案:

答案 0 :(得分:2)

不可能这样做,因为UnitOfWork模式是由NHibernate的Session对象实现的。 但是,您只想从DAL引用NHibernate,这是非常无用的,因为您的DAL对应用程序的上下文一无所知,并且为了使用UnitOfWork,这个上下文是必需的。

答案 1 :(得分:1)

看看NHibernate 3.0 Cookbook我发现它对于掌握NHibernate非常有用。

您需要提取实体并创建POCO(普通旧CLR对象)。您的UI不需要任何NHibernate知识。您将在数据层中创建方法来操纵数据。

答案 2 :(得分:1)

在单独的类库中配置IoC容器,例如使用此处描述的“GuyWire”模式:

http://nhforge.org/blogs/nhibernate/archive/2009/11/07/nhibernate-and-wpf-the-guywire.aspx

答案 3 :(得分:0)

我最近在asp.net mvc应用程序中使用nhibernate构建了一个解耦架构的示例。它使用存储库模式和单独的工作单元。大多数这些概念也应该在胖客户端中重用。这是我博客上的搜索链接,其中包含可能有趣的帖子。

http://blog.bobcravens.com/?s=Nhibernate

希望这能让你开始。如果您有疑问,请告诉我。

鲍勃