從業務對象中分離數據訪問代碼並不新鮮,但我一直在尋找實現某些功能的「最佳方式」。從業務對象中抽象出數據訪問層
我有以下類:
橙色 - 這是我的業務對象。
OrangeList - 這是一個桔子列表。
用戶將通過調用OrangeList.Fetch(someCriteria)從數據存儲中獲取Orange對象。因此,OrangeList必須具有對數據訪問層的引用 - 因此它具有以下屬性:IDataProvider MyDataProvider。
這對我很有用,但問題是我們無法單獨獲取一個橙色 - 我們總是需要通過OrangeList。
Orange或OrangeList中的一個或者兩個都必須從某個可容納DataProvider的公共對象中下降。
這是一個問題,還是我的方法在第一個地方脫穎而出?
任何提示/指針表示讚賞,謝謝。
編輯:根據下面的討論,我檢出了Repository模式。
但是,對於我的項目,我認爲將Repository與DAL進一步分離是一個好主意。
因此....存儲庫是我如何獲得橙子,並保存橙子,但仍然不知道如何。我將它委託給IDataProvider,它可以是圖中列出的許多數據。
澄清 - Orange不知道如何獲取/更新自己,對不對?這是一個純粹的業務對象 - 這是重點嗎?
alt text http://img22.imageshack.us/img22/2460/repositorya.jpg
如果你想知道,我的「LegacyDataProvider」是支持舊系統,它訪問基於文件的數據庫(FoxPro中,伊克) - 但這讓我把這個包起來,並保持它從我的新代碼開始。
在.NET程序集建設方面,以防止循環引用,它看起來像我要去有Repository.DLL [OrangeRepo],一個DataProviderInterface.DLL [IDataProvider]和BusinessObjects.dll [橙]。都好?
我有知道存儲庫的想法嗎?
感謝你,雖然它看起來像我 - 我的OrangeList是存儲庫? – Duncan 2009-04-10 22:44:39
你的OrangeList是OrangeRepository的方法,如 rep.GetOrange(Guid id); .GetOranges()等 或者看看Rob Conery的管道和過濾器方法http://www.asp.net/learn/mvc-videos/#MVCStorefrontStarterKit – Sebastian 2009-04-11 08:06:14
好的,上面的編輯對我的問題有意義嗎? – Duncan 2009-04-11 11:23:59