2012-11-30 45 views
1

洋蔥建築外部服務

我目前正在開發一個基於洋蔥建築的項目。上圖顯示解決方案。

在基礎設施我們有外部服務。但是WebAPI只能訪問Core。

但是在Web API項目中,我想訪問由外部服務公開的一些模型? 我們如何在Web API中不添加對基礎架構的引用的情況下實現這一目標。

或者我們實現的洋蔥架構錯了?

回答

1

從概念上講,你是在正確的軌道上,但實施並不難。開始你最多不需要5個以上的項目,你需要3個(web ui css/js/views,邏輯/控制器,代碼和測試)。實際上你可能只需要2個(應用程序,測試)

層的想法是概念性的,而不是物理的。而且還沒有一個強硬的規定說層必須完全隔離。而應用程序的核心重點是應用程序的功能。當您深入瞭解如何實現這些細節時,您將移至外層。

在這種情況下,您需要訪問從外部服務檢索到的數據。爲外部服務創建一個抽象IExternalServiceAdaptor。該接口可能駐留在域或服務器層中,但實現可能駐留在基礎結構或外層中,其中如何調用外部服務的細節將封裝在IExternalServiceAdaptor的實現中。

如果你堅持你的物理分離,你將有一個接口在Core和執行Infrstructure

0

但是在Web API項目中,我想訪問由外部服務公開的一些模型?

實際上,您的WebApi項目應該只處理Core項目中定義的對象。正如Jason所說,對任何外部服務的調用都應該封裝在駐留在Core中的接口的實現中。這就是你的外部服務公開的模型將被映射到你的核心模型。

看看Matt Hidinger在CodePlex上的源代碼:http://onionarch.codeplex.com/並檢查他是如何處理這類問題的,它非常簡單易懂。