2

我需要一些建议,我们如何在表示层中解耦 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

4 回答 4

2

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

于 2010-12-13T11:55:05.953 回答
1

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

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

于 2010-12-13T00:26:18.247 回答
1

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

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

于 2010-12-13T11:51:20.430 回答
0

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

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

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

鲍勃

于 2010-12-13T00:32:25.427 回答