2014-03-07 66 views
3

說我有2類在SOA模型應用..類變量VS在java的傳遞參數 - 的設計問題

  1. 服務類 - 這需要請求,並返回響應
  2. 爲了進一步處理(比如,商業邏輯/解析/道等),它將請求傳遞給SvcBusiness類。

問題是,應該是SvcBusiness類使用請求作爲它的類變量,還是應該在其中一個業務方法中使用請求?有可能需要將請求傳遞給其他較低層,如DAO層。這些類是否也使用請求作爲類變量,或者請求是否只是方法的一部分?

ServiceImpl類:

public class ServiceImpl { 

    public Response getDataForType1Request(Request type1) { 
     SvcBusiness buzclazz = new SvcBusiness(); 
     return buzclazz.doOperationForType1(type1); 
    } 

    public Response getDataForType2Request(Request type2) { 
     SvcBusiness buzclazz = new SvcBusiness(); 
     return buzclazz.doOperationForType2(type2); 
    } 

} 

選項1:當請求作爲參數傳遞。

public class SvcBusiness { 

    public Response doOperationForType1(Request type1) { 
     // do business and return response1 
    } 

    public Response doOperationForType2(Request type2) { 
     // do business and return response2 
    } 

} 

選項2:請求被設置爲類變量。在這種情況下,ServiceImpl將在創建對象時將請求傳遞給SvcBusiness構造函數,並且將簡單地調用execute()方法。

public class SvcBusiness { 

    private Request request; 

    public SvcBusiness(Request request) { 
     this.request = request; 
    } 

    private Response doOperationForType1() { 
     // do business and return response1 
    } 

    private Response doOperationForType2() { 
     // do business and return response2 
    } 

    public Response execute() { 
     // if type1 request call doOperationForType1() 
     // if type2 request call doOperationForType1() 
    } 

} 

請幫忙!兩者的優點和缺點是什麼?是否有設計模式來解決這種情況?

回答

2

不要在您的類層次中進一步使用請求(和響應)!該服務(以及服務調用的所有內容)可能從其他地方調用,而其他地方則不需要請求。然後你會填充該參數有問題。在服務中使用自己的數據模型,並從請求中提取並轉換您需要的所有內容。

0

完全同意Uwe的回答。然而,如果你仍然想要使用Request類,那麼它將作爲一個參數(Servlet的工作方式)而言不那麼有害。否則,你必須在高度可能的多線程環境中處理同步。

0

當我面對這樣的問題時,我總是懷疑我是否真的需要一個對象。通常我使用選項1,但創建所有方法爲static。由於這些方法不依賴於當前的對象狀態(沒有實例屬性),所以我保存了一些內存而不是創建這樣的對象(其他選項只是實現Singleton模式)。

public class SvcBusiness { 

    public static Response doOperationForType1(Request type1) { 
     // do business and return response1 
    } 

    public Response doOperationForType2(Request type2) { 
     // do business and return response2 
    } 

}