2008-11-05 65 views
7

我打算通過使用nhibernate作爲ORM來實現我的下一個項目(asp.net MVC)。由於我沒有使用nhibernate的經驗,我想知道我應該如何組織不同項目之間的依賴關係。 我見過這樣的事情作爲一個推薦的方法:NHibernate架構?

  • UI取決於模型庫和NHibernate
  • 庫依賴於模型和NHibernate
 

    ----- UI----------------------------- 
    |    |     | 
    |    |     | 
    Model NHibernate 

的問題是我做的不想讓UI代碼直接與nhibernate交互,所以我在想這樣的事情:

  • UI取決於型號和外觀
  • 門面取決於模型和NHibernate
----- UI -------- | | | | 模型

門面,實際上將有存儲庫以及封裝nhibernate對象。

這聽起來合理嗎?有關首選架構的指南嗎?

感謝名單

+0

對不起,但我無法獲得格式正確。 – Albert 2008-11-05 14:28:51

回答

6

這通常是我在我的應用程序做:

  • 富。核心

    • 包含域對象,業務邏輯等
    • 任何基礎設施相關的組件,如Web服務,ESB產品,或數據訪問沒有參考
    • 有些人也把庫接口在這裏,但是這是一個設計選擇。它可以讓你在這裏有您的域名服務,與庫進行交互,還是脫鉤NHibernate的
  • Foo.Persistence

    • 引用NHibernate的
    • 庫實現
    • 單位工作的HttpModule對於ASP.NET(幫助控制NHibernate在Web應用程序中的會話生命週期)
  • Foo.Web

    • ,參照上述兩個Foo.Core和Foo.Persistence
    • 的HttpModule參考控制NHibernate會話

Foo.Web從未與NHibernate直接交互...它始終通過存儲庫。使用IoC容器,您可以僅僅請求IRepository而不關心實現是什麼。

+0

似乎或多或少是我想到的。謝謝 – Albert 2008-11-06 09:20:49

0

是的。這聽起來是正確的。我從來沒有使用NHibernate,但讓你的UI與外觀之間共享你的模型聽起來不錯。當然,有許多不同的方式來達到相同的目標,但你的看起來不錯。 :)

2

你已經說過你打算使用MVC模式。這意味着你的UI不會與數據層(在你的情況下,NHibernate)交互。與數據層交互的是您的業務層,而您的UI將與您的業務層進行交互。

我對ASP.NET並不熟悉,所以我不能爲您提供有關此預構建結構的建議,但是在我主要使用的Java中,您會讓您的EJB將您的UI隔離數據層通過EJB來完成所有這些調用。

考慮隔離每層的代碼。每個層次都有一個框,每個框只能通過特定渠道與其下方的框進行通信。因此,您的數據層與您的數據庫進行通信,您的業務層與您的數據層進行通信,並且您的UI與您的業務層進行通信。所有這些通信都是單向的(也就是說,您的數據層不知道業務層等)。這意味着如果你想用新的實現來替換任何層,那麼對程序其餘部分的影響可以保持在最小。

您使用NHibernate的實際實現與MVC的使用並不相關,除了您的UI不會意識到數據如何存儲或訪問。