2012-01-21 75 views
2

在我的應用程序我有,例如,3個邏輯塊,通過用戶在該命令創建:的方法來設計的應用程序,使用HTTP請求

FirstBlock - > SecondBlock - > ThirdBlock

這是無級 - 他們之間的延遲(他們每個擴展任何其他),但存在邏輯繼承(例如Image包含Area包含Message)。對不起,我不擅長 - 希望你能理解我。

每個塊向服務器發送請求(在服務器端創建關於它的信息),然後獨立處理響應(但使用相同的http客戶端實現)。就像在那張圖片上(紅線是響應,黑色請求)。

http://s2.ipicture.ru/uploads/20120121/z56Sr62E.png

問題 它是很好的模式?或者最好創建一個控制器類,它會自己發送請求,然後處理響應結束重定向結果到我的塊?或者應該執行http客戶端控制器本身?

P.S.如果我忘記提供一些信息 - 請告訴我。如果我的英語出現錯誤,請編輯問題。

+0

你想創建一個像嚮導一樣的東西,第三個塊依賴於第二個和第二個? – Apurv

回答

2

這也是爲什麼我會用一個單獨的控制器類去處理HTTP請求和響應:

  • 減少代碼的重複(你真的需要單獨的HTTP實現?)
  • 如果/當您的應用和服務器之間的通信協議發生變化,您必須重寫全部您的課程。例如,如果您向響應有效內容中添加了另一個字段,並且您的應用程序不是爲處理它而構建的,則您現在必須重寫FirstBlockSecondBlockThirdBlock。不理想。

修改您的Implementation of HTTP client控制器類這樣的:

  • 所有的HTTP請求/響應通過它
  • 它負責路由的反應,適當的類。

優點?

  • 如果/當你改變了通信協議,所有相關的代碼是在這個控制器類,你不必觸摸FirstBlockSecondBlock,或ThirdBlock
  • 調試你的HTTP請求!
+0

正如我在圖像上演示的那樣 - 只有一個http客戶端的實現。但是每個班級自己形成數據。你的「優點」聽起來不錯,但這裏有另外一個問題 - 將http控制器分成「http client」和「controller」是一個更好的主意嗎?或者「http controller」就好了? –

+0

我可能不清楚。讓我澄清。通過_controller_,我的意思是它處理_sending_ HTTP請求,以及_receiving_ HTTP響應。所以在你的圖片中,所有的**紅色**箭頭都會指向'HTTP客戶端的實現'而不是**第一,第二,第三。反過來,從「執行......」到每一個第一,第二,第三的箭頭將是**雙向**箭頭。這有意義嗎? –

+0

是的,我明白了。謝謝 ) –

1

我建議你的3個街區不直接與HttpClient打交道。他們每個人都應該處理一些處理遠程連接發送請求和處理結果的接口。例如:

public interface FirstBlockConnector { 
    public SomeResultObject askForSomeResult(SomeRequestObject request); 
} 

然後HTTP請求和響應的細節將在連接器實現中。你可能會發現你只需要一個連接器來實​​現所有3個RPC接口。一旦你分離出RPC機制,那麼你可以在實際處理HttpClient對象的實現中找到公共代碼。您也可以用另一個RPC機制替換HTTP而不更改您的塊代碼。

在控制器方面,我認爲他們是一個Web服務器端的術語,而不是客戶端,但也許你的意思是像上面這樣的連接器。

希望這會有所幫助。

相關問題