2017-02-27 60 views
0

我正在着手一個新項目,我需要一些來自資深建築師/設計模式大師的指導!如何在運行時改變持久層C#

我的新項目需要有一些持久層,由此客戶可以在運行時該數據將被存儲,例如決定,在房子的SQL數據庫,MS Exchange或谷歌存儲。

功能將基本相同,只是每個存儲/實現將有所不同。

什麼我不找這裏是你怎麼做,它只是一個指針的最佳模式,以使用爲我的目的,同時還提供靈活的道路作爲自己將改變。我試圖避免具體的實現,這將不可避免地導致一些討厭的代碼氣味。

我知道它會涉及一些類似的DI,但任何指針在這裏將不勝感激。

回答

1

真的沒有什麼特別的,所以如果你遵循標準的做法與DI和使用容器來緩解你的任務,如SimpleInjector這將做的伎倆。你的主要觀點應該是不依賴於具體的類,而是抽象的,這就是DI容器將幫助你組織這一點的地方。

E.g.如果您打算保存用戶,則可能需要使用IUserRepository,方法SaveUser。然後你將實現SqlUserRepository,GoogleStorageRepository等。對於任何其他數據訪問層接口也是如此。如果你這樣做,你將需要配置你的DI,以便你可以根據你的需要在運行時提供所需的存儲庫。不要忘記永遠不要直接依賴GoogleStorageRepository等,而只能在通用接口上使用。我將爲每個實現創建一個接口項目(以及DL將知道的相應的BI數據模型)以及一個項目,以便進一步分離它。

1

存儲庫模式是關於創建持久層和業務層之間的分離。

在網絡上的許多例子只是用它作爲他們的數據實體的包裝演示了不正確。這是不正確的。存儲庫類/接口的設計應該由業務需求驅動,而不是由第一個數據存儲的外觀如何驅動。

因此它是您的使用案例的完美模式。您可以從業務層角度定義存儲庫接口,然後爲每個數據存儲(如MSSQL)創建一個實現。我甚至將這個接口放在了我的業務層,以進一步展示這個視角。