2010-10-01 52 views
2

我設計一個C#應用程序設計分層應用與NHibernate和上下文更改數據庫

  • 演示(網站+ Flex應用程序)
  • 業務邏輯層(可能是WCF來實現多客戶端平臺)
  • 數據訪問層(與NHibernate)

我們將我們的解決方案在許多preexistant客戶的數據庫environnements整合,我們想在DAL使用NHibernate的..中號y同事指出,使用NHibernate從客戶端數據庫(如User或Image)生成類會導致BLL在每次數據庫更改時炸燬我們的面孔! 所以問題是我們如何防止這種情況發生? 我們正在考慮創建業務對象,並使用AutoMapper將NHibernate對象映射到這些BO(嗡嗡聲,是否會使它們成爲DTO?),並防止dal更改影響BLL。是否要這樣走?

謝謝!

編輯:

爲了讓更好的理解我們正在努力實現的目標,你可能需要方面: 我們正在建設中的照片存儲/共享應用程序中的Flex前端和後端主要爲我們公司的C#,所以我們處理代碼和數據庫的各個方面。

但是:該產品也可以通過層購買,最終已經有一個數據庫與用戶表或圖像表。我想在這裏一個新的前景誰有一個圖像表幾百幾百萬行,併爲我們的業務邏輯添加列的是不會因爲表的時間過長的改變要發生的事情。

即使有可能(例如用戶表可以因爲較少的行而被修改),我們正在問自己如何處理表結構的變化,而不是每次我們必須集成到一個層時,都不會影響我們的所有解決方案數據庫,從BLL到Flex中的客戶端應用程序!

回答

2

,業務對象(AKA域對象)應當在OO建模來代表你的現實生活中的商業實體,並在第三範式的表(這可能取決於你是什麼樣的設計速度VS文件大小後更改)

NHibernate的應該將BO的和表之間的映射,使用它的映射文件。

現在你有合法的情況:

  • 您需要添加/刪除列,我們決定刪除addressline4,這會迴響在你的地址對象的變化,多數民衆贊成罰款。
  • 您將列移動到更好的位置,我們的Client對象包含當前存儲在Contract_Extra表中的備註,該表將被移入客戶端表中。移動列到一個更好的地方,只會影響映射文件,在這種情況下

我懷疑有毯子的推理,但我希望的例子讓你覺得這個

我還沒有試過NH跨越多個Db,也應該each database have its own service on top

這裏有一些鏈接

希望這有助於

+0

我喜歡這個答案。我看到了PL,BLL和DAL的說法,相反,這個答案涉及DDD。我希望在這方面看到更多的深度。 – blu 2010-10-02 01:46:25

+0

我編輯了第一篇文章,給你更多的上下文。我認爲多表實體+自定義數據訪問是解決方案的一部分! – Breakdown 2010-10-02 11:27:21

0

這聽起來像你想設計你的域模型是數據庫不可知的。我也對有一個可以映射到多個不同數據庫模型的中心域模型的最佳方法感興趣。

你所建議的方式,使用代碼生成器從每個數據庫中創建DTO的,可能是一種選擇。另一種方法是爲每個預先存在的數據庫創建自定義的NHibernate映射。您仍然可能需要使用一些DTO來減少某些映射的難度,但它可能會給您更多的控制權。

這些只是一些想法。使用NHibernate的更有經驗的用戶可能會更好地瞭解您的情況。

在我的經驗
+0

NHibernate的映射應訣竅,但如果數據庫表包含比我的DTO類更多的列呢?我無法控制幾個特定的​​表格(將我們的解決方案集成到其他客戶端數據庫時),因此我只能適應,這是一個問題嗎? – Breakdown 2010-10-01 20:09:46