我正在爲我的應用程序使用實體框架4.1和ASP.Net MVC 3。 MVC提供了表示層,一箇中間庫提供了業務邏輯和實體框架類的行爲作爲我猜想的數據層?實體框架,應用程序層和關注點分離
我可以將實體框架代碼分成一組存儲庫類或其適當的變體,無論構成一個有價值的數據層,但是我在解決設計問題時遇到了問題。
如果存在多層方法來幫助我關注問題,那麼我認爲我選擇的數據持久性也不應該成爲表示層的問題。問題是,通過使用實體框架,我基本上緊密地將我的應用程序與實體更改自動跟蹤並保持的概念緊密耦合。
因此,讓我們假設在一個假設的世界中,我找到了一個不使用實體框架的理由,並希望將其交換出去。一個設計良好的解決方案應該允許我在適當的層執行此操作,而不會影響依賴層,但是因爲所有代碼都是在知道數據層跟蹤對象更改的情況下編寫的,所以我只能將實體以類似的方式工作的框架,例如nHibernate。
如何使用實體框架但不需要以假定實體更改正在被數據層跟蹤的方式編寫我的代碼?
更新那些仍然不知道這個問題在他們自己的情況:
Ayende Rahien寫了一大篇擊落這整個論點: http://ayende.com/blog/4567/the-false-myth-of-encapsulating-data-access-in-the-dal
只是想補充一點,所有的ORM也會分擔一些難以替換的差異。 關閉我頭腦中的差異包括級聯刪除行爲,急切的加載行爲,linq行爲(必須在跳過之前執行命令),存儲過程/視圖行爲,臨時sql行爲,投影行爲,甚至與LINQ。神話可交換的ORM層不存在。無論如何,你需要做很多工作。 – jfar 2011-05-11 21:10:04
很好的答案!老實說,有時候我只是需要將這些東西從別人身上反彈出來,讓我放心。 – 2011-05-12 10:26:53
對於單個應用程序來說,這是一個很好的觀點,但是如果您計劃編寫多個應用程序並且它們都應該使用相同的基本概念(也許還有代碼庫),那該怎麼辦?然後事情變得複雜,你不能只是「建立客戶想要的」(他不知道)。 – Marc 2017-07-06 11:40:18