2010-05-12 91 views

回答

1

理想情況下,兩者都不應該依賴於其他 - 但實際上,域將取決於數據層,但希望間接。

這是什麼意思?

數據層不應該依賴域層。

域層可能會使用數據對象,但最好是通過依賴注入來完成。一種方法是使用接口,並且只在編譯時引用接口。在運行時通過IoC容器(如Structure Map或Unity)爲這些接口提供具體實現。

這也將幫助您能夠單元測試您的解決方案,以及強化問題分離並創建一個鬆散耦合的系統。

+0

你在界面中使用什麼類型? DAO或域實體? 'void Save(ProductDAO p);'或'void Save(Product p);'?這肯定會迫使一個人依靠另一個。如果前者,領域層需要了解DAO。那麼完全封裝的域呢? – 2010-05-12 13:36:42

+0

這種方法對我來說效果很好。我在域層中定義了DAO接口,並將域對象傳入和傳出接口方法。域實體引用接口。然後在運行時使用工廠來實例化DAO的實現。所以數據訪問層引用了域層,但域對象只引用了DAO接口並且獨立於實際的實現。 – BenV 2010-05-12 15:23:28

0

通常,域(業務邏輯)層應該依賴於數據層,但不能以其他方式。

理由:

  • 你要保持靈活性,以改變業務邏輯,而不必對數據的任何不必要的影響
  • 數據層將是更簡單,更不容易出錯,如果你可以把它設計爲獨立業務邏輯決定
  • 領域層一般是數據層的調用者,所以沒有必要使依賴另一種方式圓

這實際上非常類似於領域層對錶示層應該具有最小依賴性的方式(儘管在實踐中這可能難以實現)。