2017-03-13 161 views
1

之間的通信與網絡中的API 2控制器之間的通信人的經驗?我們假設,我們正在網絡專區工作。的Web API 2 - 控制器

小例子:

public class ClassB : ApiController 
{ 
    public HttpResponseMessage Get(string id) 
    { 
     // return some data 
    } 
} 

public class ClassA : ApiController 
{ 
    public HttpResponseMessage Post(string id) 
    { 
     // call ClassB - method Get 
     // consume data from ClassB 

     return Request.CreateResponse(); 
    } 
} 

任何實例,類,模式,關鍵詞 - 任何將有利於啓動

+0

所以2個網絡控制器在同一個項目,你想重用代碼?或2個網絡控制器部署到2個不同的位置? – Igor

+0

第二種情況對我來說更重要。問題是:如何溝通控制器,也就是說像隊列這樣的層可能是有用的,或者是用來控制數據的其他東西。無論如何,控制器之間的交換數據仍然是主要問題。 – riwex

回答

0

取決於如果控制器相同的應用程序域或單獨的一部分。如果它們分開部署,則需要使用httpclient調用ClassB.Get控制器。下面EX-

HTTP客戶端

using (var client = new HttpClient(handler)) 
     {            
      var response = await client.GetAsync("http://contoso.com/products/product1"); 
      var product= await response.Content.ReadAsAsync<Product>(new [] { new JsonMediaTypeFormatter() }); 

      // Add your logic here         
     } 

    return this.Request.CreateResponse(HttpStatusCode.OK, data); 

代碼重用

如果它們是相同的應用程序域的一部分,那麼你可以通過提取其單獨的類重用的代碼。根據您設計解決方案的方式,可以使用不同的設計方法。例如,您可以使用DDD(domain driven design)。在域實體或服務中提取邏輯(根據您的域更適合)和重用邏輯。

希望這會有所幫助。

+0

我認爲這個庫也可能有用:http://restsharp.org/。感謝您的快速回復。 – riwex

0

你的控制器不應該打電話給對方,基本控制器只能驗證輸入,委託給其他服務或域類的調用,那麼輸出發送給調用者。 如果有2個控制器之間的共享功能,那麼它應該是在一個單獨的類和兩個控制器將調用相同的方法

+0

讓我們假設你有服務「訂單」(OrderController)和服務「存儲」(StoreController)。您如何獲取信息:您的商店有多少產品,以確保您的訂單能夠完成。在您完成訂單之前,您必須詢問有關產品數量的「存儲」。任何設計模式?我想盡可能刪除所有依賴項。也許我的想法是錯誤的,或者可能存在任何模式或更好的方式? – riwex

+0

你可以看看領域驅動設計來處理這種情況下,如果你不想使用它,然後進行存儲域服務和訂購其他服務而這些服務可以相互通信。最後,管制員會打電話給他們其中一人,這項服務將處理剩下的事情 –