2014-04-25 102 views
0

這是我第一次嘗試實現洋蔥架構。我是否正確實施了洋蔥架構?

enter image description here

AppService -> folder for the abstractions for the entire Application 
Business -> Business logic using the abstractions in the Core project 
DataService -> folder for abstractions that are implemented in the DataAccess project 
Model -> Entities used by the application 
WebService -> folder for abstractions that are implemented in the WebAccess project 
  1. 在文件夾放在上面是否正確?
  2. 是域文件夾中DependencyResolution項目的位置嗎?
  3. 基礎架構中的每個項目是否應該包含一個DependencyRegistrar文件,該文件將Core項目中的接口註冊到項目中的實現中,並將其包含在內?
  4. WebApi項目應放置在Presentation-> Api中嗎?它是一個演示文稿?
  5. 我應該在「測試」文件夾中放置每個項目的所有單元測試嗎?

在此先感謝。

回答

1
  1. 您的文件夾結構通常看起來很好。就我個人而言,我會採取更模塊化的方法,其中核心項目中的文件夾實際上是我的個人項目,但這只是我的偏好。
  2. 依賴性解決方案不屬於你的域名,它也不是真正的基礎設施(至少在我看來)。這本身就是一個概念。
  3. DependencyRegistrar似乎沒有必要。將抽象映射到實現是依賴關係解析的責任。
  4. 我的直接反應是否定的,但在過去,我已經完成了單頁面應用程序,我在同一個項目中使用了MVC和WebApi。因此,他們一起成爲客戶。如果每個移動客戶端都有自己的後端,我會將這些項目放在與客戶端相同的文件夾中。否則,如果它們在多個不同客戶端之間共享,我會考慮使用頂級「後端」或「服務」解決方案文件夾。
  5. 我認爲每個項目和他們的測試彼此相鄰都更有意義,因此從一個導航到另一個或反之亦然很容易(即不必上下滾動解決方案)。

因此,除了依賴解決方案居住在域和DependencyRegistrar s,似乎很好。具體細節取決於你認爲最好的。

+0

洋蔥的所有圖表顯示依賴分辨率作爲最外層,因此UI不能依賴於DR。你的用戶界面是否依賴DR?你如何解決這個問題? –

+0

基本上,我設計我的應用程序的方式是,每個[Composition Root](http://blog.ploeh.dk/2011/07/28/CompositionRoot/)都應該有它自己的引導程序,而引導程序又引用DR(多就像它在[這個問題]中描述的一樣(http://stackoverflow.com/questions/14891371/dependency-resolution-in-onion-architecture))。也許我對DR的理解稍微偏離了它的本意,但它對我個人而言仍然很有效,同時仍與兼容依賴的體系結構的核心理念兼容。 –

+0

謝謝,我接受了你的回答。但我無法通過WebActivator完成此任務。我的一個UI是一個WPF應用程序,我不知道如何在這種情況下外部化DR,而無需直接在WPF應用程序中引用它。你能給我一個線索嗎? –