2010-11-15 36 views
4

我最近開始閱讀Pro ASP.NET MVC Framework如何避免一次在數據庫中聲明數據庫字段兩次,一次在存儲庫/模型中?

author談論創建存儲庫,並使用接口來設置快速自動化測試,聽起來很棒。

但它帶來的問題是必須爲數據庫中的每個表聲明自己的所有字段兩次:一次在實際數據庫中,一次在C#代碼中,而不是自動生成C#數據訪問類ORM。

我明白,這是一個很好的做法,並使TDD看起來很棒。但我的問題是:

是否有任何解決方法必須聲明字段兩次:都在數據庫和C#代碼?我不能使用自動生成C#代碼的東西,但仍然允許我執行TDD,而無需在C#中手動創建所有業務邏輯,併爲每個表創建一個存儲庫(也是一個假的存儲庫)?

+0

是什麼讓你認爲你必須聲明兩次業務邏輯? – jason 2010-11-15 16:26:22

+1

「...不得不自己聲明數據庫的所有業務邏輯兩次:一次在實際數據庫中......「等等,什麼?BL不會進入數據庫,是什麼讓你認爲它在這裏? – annakata 2010-11-15 16:28:58

+0

我的意思是你聲明所有數據庫中每個表的字段有兩次,一次在數據庫本身,一次在C#代碼中,這可以通過使用像LINQ To SQL的自動映射類 – bevacqua 2010-11-15 16:29:33

回答

3

如果使用Entity Framework 4,則可以從數據庫自動生成POCO對象。 (http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx

然後,你可以實現一個通用的IRepository及其通用的SqlRepository,這將允許你有一個所有對象的存儲庫。這是在這裏解釋:http://msdn.microsoft.com/en-us/ff714955.aspx

這是一個乾淨的方式來實現你想要的:你只在數據庫中聲明你的對象一次,自動生成它們,並可以輕鬆地訪問它們與你的存儲庫(另外你可以做IoC和單元測試:))

我建議你讀這本書是純金的第二版,並與MVC 2 http://www.amazon.com/ASP-NET-Framework-Second-Experts-Voice/dp/1430228865/ref=sr_1_1?s=books&ie=UTF8&qid=1289851862&sr=1-1

引入的新功能更新,您也應該閱讀有關的新功能MVC3引入了現在的RC(有一個新的視圖引擎真的很有用)http://weblogs.asp.net/scottgu/archive/2010/11/09/announcing-the-asp-net-mvc-3-release-candidate.aspx

+0

是的,我讀了一些關於剃鬚刀,它看起來很棒,但由於我對本書中的大多數概念都很陌生(幾乎所有東西都是<= LINQ),我會首先完成本書,然後轉移到其他人... – bevacqua 2010-11-15 20:23:10

+0

+1此答案也。我讀過你在亞馬遜上關聯的書,我也認爲這是純金。它確實是一個平穩的閱讀,並很好地解釋了一切。比第一章中那個書呆子晚餐廢話的wrox要好得多,在你篩選本書的論壇並找到其他受挫的讀者最終找到解決辦法之前,甚至不會編譯它。 – Chev 2010-11-17 07:40:27

2

您未聲明業務邏輯兩次。只是這個業務邏輯是在一個接口後面抽象出來的,在這個接口的實現中,你可以做任何你想做的事情:命中數據庫,從文件系統讀取數據,從Web地址聚合信息......這個接口允許控制器和存儲庫的實現以及其他簡化TDD。把它看作是控制者和企業之間的合同。

4

我明白你的意思:你聲明要通過存儲庫檢索到的大多數POCO類看起來很像你的ORM框架自動生成的類。因此,很容易將這些數據訪問類重用爲業務對象。

但是根據我的經驗,在數據訪問類中,我很少需要一條業務邏輯中的數據是,正好是。通常我需要某個數據對象的特定數據子集,或者通過將幾個數據對象連接在一起而生成的某些數據組合。如果我願意再花兩分鐘實際構建我想到的POCO,並創建一個接口來表示我打算使用的存儲庫方法,那麼我發現代碼在需要時可以更容易重構改變業務邏輯。

+0

+1。創建存儲庫是一項小工作,但將其滑動到界面後面會使事情變得如此簡單。輕鬆更換業務邏輯和簡單的TDD :) – Chev 2010-11-17 07:37:28

相關問題