簡體   English   中英

java中的類變量與傳遞參數 - 設計問題

[英]Class variable vs passing parameter in java - design issue

假設我在SOA模型應用程序中有2個類。

  1. 服務類 - 接受請求並返回響應
  2. 為了進一步處理(比如業務邏輯/解析/ dao等),它將請求傳遞給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()
   }

}

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

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

完全同意Uwe的回答。 但是,如果您仍然想要使用Request類,那么它作為參數(Servlets的工作方式)的危害就會小一些。 否則,您必須在極有可能的多線程環境中處理同步。

當我遇到這樣的問題時,我總是想知道我是否真的需要一個物體。 通常我使用選項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
   }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM