我已經在一些3層應用程序中作爲團隊的一部分工作了相當長的時間。我喜歡這種架構,但在所有這些應用程序中,我注意到數據抽象層上最高兩層的依賴性很強。這使得測試和模擬變得很困難,因爲如果沒有現有的數據庫連接到一個非常大的數據庫,運行應用程序或執行某些方法實際上是不可能的。有沒有試圖解決這個問題的模式?從3層體系結構中刪除數據庫依賴關係
1
A
回答
1
的Dependency Inversion Principle(DIP,固體原則之一)正是解決你所描述的情況:
A.高層模塊不應該依賴於低級別的模塊。 都應該依賴於抽象。
B.抽象不應取決於 的細節。細節應該取決於抽象。
對於您的情況,特別是A部分是相關的:UI和業務邏輯不是引用數據層,而是應該僅取決於可以以各種方式實現的抽象(例如接口)。對於業務層而言,這意味着您需要定義業務層所依賴的接口。數據層提供了這些接口的實現。
對於測試,您可以提供接口相關部分的另一個實現。通過這種方式,您可以準確提供測試中使用的數據,而不必準備好完整的數據庫進行測試。
這種模式也被稱爲Inversion of Control。你會發現你很快會有幾個接口,你需要在運行你的程序時提供實現。你可以通過使用abstract factories或者更簡單的方式來解決這個問題 - 一個控制反轉容器,它配置了實現接口的具體類型的註冊。
在這方面您可能會發現有用的另一種模式是Repository pattern。
相關問題
- 1. 三層體系結構中的SQL依賴關係和SignalR
- 2. 3層架構依賴關係
- 3. 類依賴關係和層次結構
- 4. 從數據庫中刪除對象時,它有依賴關係
- 5. 數據庫依賴關係
- 6. 從Makefile中刪除依賴關係
- 7. 三層體系結構:必須避免層之間的異常依賴關係?
- 8. 刪除EMF依賴關係
- 9. Mercurial,依賴關係,存儲庫結構
- 10. 從構造函數中刪除依賴關係
- 11. 結構圖 - 具有依賴關係的安裝依賴關係
- 12. 從依賴關係中排除依賴關係
- 13. 三層體系結構:數據層應該依賴於域層,反之亦然?
- 14. 依賴關係從鮑爾刪除
- 15. 從pod刪除依賴關係
- 16. 排除內層依賴關係
- 17. 在javascript中刪除類依賴關係
- 18. 3層體系結構中的IOC
- 19. 瞭解Zope組件體系結構和組件依賴關係
- 20. .NET CLR和CPU體系結構依賴關係
- 21. C編譯器對體系結構的依賴關係
- 22. n層體系結構中的依賴注入 - 如何實現
- 23. 數據庫體系結構
- 24. 腳本中的Gradle依賴關係層次結構
- 25. 我的項目層次結構中的彈簧依賴關係
- 26. 3層體系結構中從客戶機到數據庫的通用方法
- 27. 數據庫模型依賴關係
- 28. redgate數據庫依賴關係
- 29. 數據庫結構關係數據庫
- 30. 依賴關係的nuget依賴關係
很好的答案,這很清楚。謝謝! –