2014-04-21 50 views
1

我已經在一些3層應用程序中作爲團隊的一部分工作了相當長的時間。我喜歡這種架構,但在所有這些應用程序中,我注意到數據抽象層上最高兩層的依賴性很強。這使得測試和模擬變得很困難,因爲如果沒有現有的數據庫連接到一個非常大的數據庫,運行應用程序或執行某些方法實際上是不可能的。有沒有試圖解決這個問題的模式?從3層體系結構中刪除數據庫依賴關係

回答

1

Dependency Inversion Principle(DIP,固體原則之一)正是解決你所描述的情況:

A.高層模塊不應該依賴於低級別的模塊。 都應該依賴於抽象。

B.抽象不應取決於 的細節。細節應該取決於抽象。

對於您的情況,特別是A部分是相關的:UI和業務邏輯不是引用數據層,而是應該僅取決於可以以各種方式實現的抽象(例如接口)。對於業務層而言,這意味着您需要定義業務層所依賴的接口。數據層提供了這些接口的實現。

對於測試,您可以提供接口相關部分的另一個實現。通過這種方式,您可以準確提供測試中使用的數據,而不必準備好完整的數據庫進行測試。

這種模式也被稱爲Inversion of Control。你會發現你很快會有幾個接口,你需要在運行你的程序時提供實現。你可以通過使用abstract factories或者更簡單的方式來解決這個問題 - 一個控制反轉容器,它配置了實現接口的具體類型的註冊。

在這方面您可能會發現有用的另一種模式是Repository pattern

+0

很好的答案,這很清楚。謝謝! –