2012-02-09 104 views
5

我有三個核心應用程序有自己的業務功能(網絡,活動目錄和服務檯)。每個都運行ASP.NET v2或v3並具有各自的數據庫。但是,應用程序功能已經合併了一段時間,所以模型在每個應用程序和應用程序邏輯中都隨之重新創建。所以現在我有一些難以維護的代碼。所以這裏是我的問題:設計選擇:WCF或服務堆棧?

  1. 是否將我的模型和存儲庫移植到WCF這種類型的體系結構的合理選擇?

  2. 正在使用服務堆棧如序列化json調用更好的選擇?我想這會比建立一箇中央wcf應用程序更快。

我不太熟悉asp.net mvc web應用程序之間的通信,所以請給我指出正確的方向。

回答

1

我會建議開發一個service layer per the design pattern described by Fowler。該服務層封裝了各種域模型和存儲庫,並處理不同域/模型之間的交互。這將是一個程序集,而不是WCF或任何其他類型的Web服務。如果你需要一個WCF Web服務,那麼它將是一個非常薄的層,它基本上有一個模仿服務層的合約,而唯一的目的是提供一個Web服務接口或API。

MVC應用程序可以通過幾種方式與服務層進行交互。如果您要在控制器中創建視圖模型,則可以直接訪問服務層組合。在這種情況下,通過最有可能不需要的Web服務調用它會增加開銷。使用這種方法,服務層幾乎是MVC三重奏中的模型。

另一種訪問服務層的方法是使用AJAX for富客戶端的Views/client。在這種情況下,您可以使用MVC將REST API放在服務層之上,以便您可以使用諸如JQuery之類的東西將AJAX POST直接發送到Web服務來更新和檢索網頁數據。

請注意,這種架構可以結合使用這兩種方法。您可以直接從Controller訪問服務層以呈現一些初始頁面,然後在用戶交互期間使用Web服務REST接口進行AJAX調用。

+0

我不明白你的意思是直接訪問服務層。一個MVC應用程序與另一個MVC應用程序的服務層聯繫的方法是什麼? Web客戶端? .NET Remoting?我希望能夠直接訪問其他應用程序的數據上下文或存儲庫。 – Jiminy 2012-02-10 12:51:32

+0

我所指的服務層是.NET程序集或DLL。所以它只是一個在任何需要使用它的應用程序中引用的庫。您不希望將其作爲單獨的物理層,除非由於與其相關的成本而帶來實際收益。如果你確實需要把它放在另一個層中,那麼圍繞這個程序集/庫創建一個WCF服務包裝器。 Web服務接口的類型取決於使用它的客戶端(例如:使用JSON的Web客戶端的REST)。如前所述,您可以使用WCF和庫進行混合搭配。 – 2012-02-10 13:05:46