我們的.NET應用程序需要連接到2個不同的SQL數據庫。一些查詢將被路由到第一個數據庫,一些查詢將被路由到第二個數據庫。是否有任何特定的設計模式來實現這一點。是否有任何DataAdapter可以在運行時從一個數據庫切換到另一個數據庫。多個數據庫場景的設計模式
4
A
回答
6
將每個數據庫封裝在Strategy之後 - 涉及到數據庫時,我們經常傾向於將它們稱爲Repositories。您現在可以將這兩種實現封裝在路由請求的Composite之後。
想象一下,我們有一個IRepository接口。你可以將它們路由是這樣的:
public class RoutingRepository : IRepository
{
private readonly IRepository repository1;
private readonly IRepository repository2;
public RoutingRepository(IRepository repository1, IRepository repository2)
{
if (repository1 == null)
{
throw new ArgumentNullException("repository1");
}
if (repository2 == null)
{
throw new ArgumentNullException("repository2");
}
this.repository1 = repository1;
this.repository2 = repository2;
}
public SomeEntity SelectEntity(int id)
{
if (this.UseRepository1())
{
return this.repository1.SelectEntity(id);
}
else
{
return this.repository2.SelectEntity(id);
}
}
// more IRepository members can go here...
private bool UseRepository1()
{
// implement routing logic here...
}
}
客戶將只能看到IRepository接口,所以要根據Liskov Substitution Principle,他們將永遠不會知道其中的差別。
+3
不知道爲什麼,但是這篇文章讓我想到了http://blog.ploeh.dk/2010/04/07/DependencyInjectionIsLooseCoupling.aspx,即使這個問題略有切線,也值得一讀。 – 2011-04-11 08:49:36
+0
謝謝馬克。 Repository模式確實解決了這個問題。 – Msdnexpert 2011-04-12 12:26:57
相關問題
- 1. 如何正確設計此場景的數據庫模式
- 2. 基本數據庫設計場景
- 3. 多個模型的數據庫設計?
- 4. 設計模式場景基礎學習
- 5. 設計數據庫模式
- 6. 計劃的數據庫模式設計
- 7. 哪個設計模式在這個場景中是正確的?
- 8. 什麼是設計這個數據庫場景的最佳方式?
- 9. 數據/數據庫設計模式?
- 10. 多個大型列表的數據庫設計模式
- 11. 一個產品多個市場數據庫設計
- 12. 針對多列相同數據模式的數據庫設計
- 13. 針對此給定場景的數據庫設計
- 14. 數據庫設計爲特定的銷售訂單場景
- 15. 自定義場景的數據庫表設計
- 16. 需要針對場景的數據庫設計
- 17. Rails 4模型,根據場景切換數據庫 - 尋求最佳設計模式
- 18. 設計模式爲Abitrary場
- 19. 工資表數據庫模式設計
- 20. MongoDB數據庫模式設計
- 21. 設計數據庫模式(MySQL)
- 22. SQL數據庫模式設計
- 23. MVC模式和數據庫設計
- 24. 在mysql中設計數據庫模式
- 25. 數據庫訪問設計模式
- 26. 設計文檔數據庫模式
- 27. 數據庫模式設計選項
- 28. 如何設計數據庫模式?
- 29. 爲具有多種數據類型的模型設計數據庫模式
- 30. 下面的場景需要遵循的設計模式
您可以設置從一個數據庫到另一個數據庫的鏈接表,那麼您只需在一個數據庫中的一個視圖上運行計算。 – 2011-04-11 07:39:35
對於專家來說,你不會接受很多 - 去修復! – 2011-04-11 08:48:48