2011-07-08 70 views
1

我有一個CommerceService模塊來幫助處理常見的訂單處理功能,其中包括諸如Authorize.net,Paypal和Google Checkout等提供商的支付授權。它提供了一個簡單的界面,如placeOrder(Order),並完成繁重的工作。關於將HttpRequest和HttpResponse傳遞給服務層的想法?

事情向前伸直與本地支付提供商,但是PayPal和谷歌提供遠程支付服務,因此與PayPal例如,用戶可以離開你的網站,支付那裏,支付寶會發送一個HTTP通知掛接到您的訂單處理。

我的問題是處理這些通知。理想情況下,將HttpRequest對象傳遞給服務層最簡單,並讓服務通過handleRemoteOrder(Request,Response)完成順序,而不是強迫前端擔心這一點。但是,將請求和響應傳遞給服務層似乎是錯誤的。

我想過提取請求參數到一個地圖,只是簡單地通過,但谷歌結帳java sdk明確地處理請求和響應對象,所以這將是一個麻煩,不利用sdk這個問題。

對於將HttpRequest傳遞到目前爲止,它是否被壓制?如果是這樣,應該有前端邏輯來處理這個問題嗎?或者這是一個毫無根據的擔心,我不應該這麼想。

+0

有什麼大不了的?把事情簡單化。以簡單的名義引進了多少複雜性? – irreputable

回答

1

HttpRequestHttpResponse包裝在實現接口的類中,並使服務層依賴接口。對於除Google以外的其他服務,您可以通過請求參數傳遞地圖,併爲Google提供包裝器實現。無論如何,服務層不會意識到背後有什麼。

1

HttpServletRequest不應傳遞給服務層。

如果您明確需要該請求,則可以將邏輯放置在Web層中。或擴展庫,並允許它採取Map的參數(如果可能的話)

1

沒有理由不能跨越你的商業模塊跨幾層。將其視爲例如UML調用一個子系統。這樣你的CommerceSBS包含多個組件,e.g:

  1. CommerceRequestMgr;控制與PSP的對話(生成PSP和回叫鏈接的鏈接)
  2. CommerceCallback;也許一個聽衆servlet等待PSP回調
  3. CommerceService;實現後端邏輯,例如數據庫或ERP訪問

這是我在過去那樣...

+0

+1非常真實 - 沒有理由不能。我想問題是你是否應該。 –

0

我Bozho和鮑里斯同意,本服務層不應該「知道」 HTTPR *。

另一種考慮的方法是放置一個適配器(位於外部服務和SL之間)。這使您可以保持SL清除不需要的依賴關係,但適配器可以讓您靈活地在必要時與外部系統良好集成;並且由於適配器是隔離的,只有一個特定的工作可以做到,因此這是一個靈活的低風險選項。