2014-01-21 77 views
3

我正在嘗試創建一個允許您切換多個數據源的系統,例如:從實體框架切換到Dapper。我試圖找到最好的方法來做到這一點。具有多個數據源的數據層體系結構

目前我對不同的數據層有不同的項目,例如, Entity Framework的Data.EF,Dapper的Data.Dapper。我已經使用了數據庫方法,但是當它創建模型時,所生成的信息被耦合在一起並且不容易重構,例如,模型分離。

我有一個項目叫做模型,這個模塊包含域和視圖模型,我正在考慮創建Data.Core並遵循存儲庫模式。但是,這樣做會增加一個額外的層,所以我會有Presentation/Business/Repository/Data。

我想知道這種方法的最佳結構。我是否也應該採用代碼優先的方式來創建我的數據庫?這有助於分離關注並改善抽象。這是一個相當大的應用程序,所以要正確的結構是必不可少的。

+0

感謝您的意見。真的很好的建議,並很高興能走在正確的軌道。 –

回答

1

我認爲你的方法是正確的。這些天我會說Presentation/business/repository/data是非常標準的。

我想說的是使用POCO的代碼優先方法是當今業界的首選方案。我建議開始創建一個包含您的POCO數據結構的項目,並將其從任何邏輯中取出。這樣做的好處是您的對象更自然地模擬域。如果你從一個以數據庫爲中心的方法開始,問題是,如果你不小心,你可能會以更接近於SQL關係數據庫而不是真實模型的對象結束。這在.net的第一個版本中非常明顯,它鼓勵使用與數據庫緊密結合的數據集,並且這往往會導致在業務層中使用問題。

如果需要,您可以在存儲庫層中的業務對象和數據庫對象之間進行任何複雜的映射。如果需要,您可以使用代理和/或工作單元。

0

我會建議你創建你的域對象,使用代碼優先方法,也適用於存儲庫模式

3

我建議您保理數據接口至通過您的實體或到倉庫界面模型基建項目。 (我認爲後者是創建Data.Core項目背後的基本原理。)

然後每個數據源將實現相同的一組接口,並且即使動態使用依賴注入,您也可以在它們之間輕鬆切換。

例如,使用存儲庫:

Model 
    \_ Entities 
     Entity 
    \_ Repositories 
     IEntityRepository  

Data.EF  
    EntityRepository : Model.IEntityRepository 

Data.Dapper 
    EntityRepository : Model.IEntityRepository 

然後在你的業務,你不需要甚至引用Data.EFData.Dapper:你可以用IEntityRepository工作,並有一個參考動態注入。

0

是的存儲庫模式確實帶來了一個額外的層。看看這篇文章瞭解更多詳細信息Difference between Repository and Service Layer?

RE:代碼優先方法的創建數據庫

不要緊,有多大你的應用程序,它是你打算什麼其他問題使用數據庫。如果這個數據庫只是這個應用程序的存儲庫,那麼使用代碼優先就好,因爲您只是存儲代碼對象。但是,如果您將此數據庫用作應用程序之間的集成點,那麼您可能希望將數據庫分開設計爲應用程序模型。

相關問題