我正在開發我的第一個.NET項目(.NET 3.5,ADO.NET和C#)。我們已經構建了我們的實體模型,並試圖構建一個乾淨的業務對象層。將業務層添加到ADO .NET Entity Framework
我們已經有了我們的基本實體模型,我們希望將某些業務級語義添加到默認數據訪問器(導航屬性等)。
例如,假設我們在Person
和BankAccounts
之間存在多對多關係。我們假設在業務層,我們希望添加凍結帳戶的功能。現在,我們希望從一個人轉到能力:
- 所有的銀行賬戶,
- 其非凍結銀行賬戶,並
- 其凍結的銀行賬戶。
當然,我們希望使名義大小寫成爲默認值:如果我瀏覽Person.BankAccounts()
,我希望它返回其非凍結帳戶。我可以添加導航屬性Person.FrozenBankAccounts()
和Person.AllBankAccounts()
。
我們提出的兩種方法似乎都有相當的代碼味道。
- 我們無法找到覆蓋實體模型方法的方法。因此,請將
Person.BankAccounts()
作爲返回所有銀行帳戶的訪問者。然後我們添加一個Person.FrozenBankAccounts()
和一個Person.NonFrozenBankAccounts()
。 - 向代碼庫添加另一個顯式圖層,將所有訪問包裝爲
BankAccounts
。
對於方法1,問題在於名義商業案例(訪問解凍的銀行賬戶)是該批次中最不直觀的方法名稱。
在方法2中,當我們從實體模型層中對對象進行子類化時,我們必須重寫每個方法以確保它不會從底層返回對象。因此,我們創建一個BL_Person
,其中有一個BankAccounts()
方法,該方法返回BL_BankAccount
對象的集合。但在這種情況下,所有的代碼似乎有點傻。
有沒有比我們考慮過的更好的方法?如果沒有更好的方法,我概述的兩個中哪一個似乎是更好的解決方案(鑑於我們有類似50+的課程,我們需要合作)?
注:雖然做網絡搜索,我找到了一封公開信給微軟名爲ADO .NET Entity Framework Vote of No Confidence這似乎暗示有沒有在一個清晰的關注分離添加的好方法。
好的方法,但是,它也可以用EF4來實現。 – 2011-04-11 20:53:54