2011-07-21 421 views
22

我正在爲即將推出的內部應用程序建立一個項目結構,試用巴勒莫提出的洋蔥建築(http://jeffreypalermo.com/blog/the-onion-architecture-part-3/)。洋蔥建築

我遵循了他的指導原則,但是到目前爲止我需要對項目結構進行驗證。

圖表之前,問題:

  1. 我想引用是正確的(設置爲每其中一個箭頭表示「有提及」圖) 但一些驗證將是一件好事。

  2. 我應該在我的依賴關係解析層中放什麼?這是在哪裏 助手去?這有所有其他項目的參考?

  3. UI服務如何與DAL進行通信? (通過核心?怎麼辦?)

  4. 應該去哪裏? [廣泛的問題,我知道...]

的簡化原理圖如下(文件夾代表命名空間):

enter image description here enter image description here

+6

我認爲把'Interfaces'放在'Infrastructure'裏面是錯誤的。它應該是Core的一部分。 – Jaider

回答

7

我想引用是正確的(設置爲每其中一個箭頭表示「有提及」圖),但一些驗證將是一件好事。

1它看起來不錯,但我不確定在圖表中插入依賴關係解決方案是個好主意。

我應該在我的依賴解析層中放什麼?這是Helpers去的地方嗎?這有所有其他項目的參考?

2我相信依賴注入的東西會在這裏。

UI服務如何與DAL進行通信?&? (通過核心?如何?)

3它是根據巴勒莫的圖核心。在覈心中,您將擁有與DAL和域模型交互的存儲庫,以及處理存儲庫和域模型的服務(而不是Web服務)。而UI/Web服務將主要與服務交談。

應該去哪裏? [我知道的廣泛問題...]

4我再次想到答案是在巴勒莫的圖中。但在我看來,當對架構有充分的瞭解時,組織項目可能會有所不同並且微不足道。

一旦我理解了DDD和必要的設計模式(如MVC,依賴注入,存儲庫/服務,ORM),洋蔥架構就變得很明顯。

6
  1. 是它們是,期望的依賴關係解析度。這些依賴關係應該是相反的。
  2. 由於名稱(以及更正的參考文獻)意味着它的目的是託管 某種IoC容器解決方案。它不是Helper 類的地方,期望輔助類用於解決目的。
  3. 核心定義DAL或域服務的接口。 DAL和 WebServices實現這些接口。在UI內部,您可以通過定義的接口使用DAL或服務實現 。 通過 Dependency Resolution組件的幫助可以解決正確的實現(查看 「Inversion Of Control」或「Dependency Injection」)的概念。
  4. 正如3.中所描述的,主要的是,在Core中,您將放置將在DAL和Web Services中實現的接口。在Core中,您將實現您的真實商業模式。此模型可以通過定義的接口(藉助依賴分辨率組件)使用DAL和Web服務。
+0

你確定依賴解決嗎?如果是這樣,那不就是說這種依賴會在洋蔥的內部,而不是在外部?這意味着Core將依賴於依賴解析程序集 - 這看起來不錯嗎? – Darbio

+0

對,核心應該對DR沒有依賴性。但其他人需要DR來獲取Core接口的實現:UI中的示例:{DR.Resolve ()。CallserviceMethod(); } – rObiwahn

+3

我不同意依賴關係解決方案rObiwahn。 DR應位於外層並引用內層。通過說'DR.Resolve(ISomeService)'這聽起來像服務定位器反模式。依賴關係解析需要知道所有實現的位置,以便它可以在需要時解決它們。 –