2013-02-18 138 views
1

我正在研究基於Java EE的基於Web的應用程序。將對象引用傳遞給Util類

我的問題:我創建的BaseAPI一個實例,並把它傳遞給一個叫BaseUtil實用工具類,如下圖所示:

package com ; 

public class Test { 
    public static void main(String args[]) { 
     BaseAPI bApi = new BaseAPI(); 
     BaseUtil.getData(bApi); 

    } 

} 



public class BaseUtil { 

public static String getData(BaseAPI bapi) { 

     bapi.addAccountIdParameter("SIM1"); 
     bapi.getData(); 
     return null; 
    } 
} 




package com; 

import java.util.HashMap; 

public class BaseAPI { 
    HashMap<String, Object> params = new HashMap<String, Object>(); 
    public void addAccountIdParameter(String value) { 
     addParameter("ID", value); 
    } 
    public void addParameter(String name, String value) { 
     if ((name != null) && (value != null)) { 
      params.put(name.trim().toLowerCase(), value.trim()); 
     } 
    } 

    public String getData() 
    { 
     return ""; 
    } 

} 

這是工作的罰款。請讓我知道這是一種有效的方法,否則它會對任何地方產生任何負面影響?

+0

你擔心什麼負面影響? – Raman 2013-02-18 14:34:28

+0

只要你的助手類爲你的操作增加了價值,我就沒有問題。只是不要過度依賴助手來完成這項工作,否則最終會出現傳播邏輯,這會使您的應用程序非常難以維持。保持你的助手凝聚力,避免將它們用作業務邏輯的基礎。 – Gamb 2013-02-18 14:37:40

回答

2

這是一個非常有效的方法,在一般情況下不會有負面影響。但是,需要更多的信息來了解它是否是您的API的最佳選擇。一個建議:

讓您BaseUtil類私有的構造函數:

public class BaseUtil { 
    private BaseUtil(){} 
    ... 
} 

這將防止創建該類的對象,如果它僅僅是一個靜態實用類的其他類。另外,如果你開始向這個BaseUtil類添加字段,你需要開始考慮線程安全性,如果你的應用程序是多線程的話。

1

從運行時的角度來看,這種方法看起來不錯,如果您引用這些方法,它不應該導致任何性能或內存問題。

從更一般的設計角度來看,它看起來很尷尬,我建議不要這樣做。您的BaseAPI類(以及該名稱已提示)看起來像公共API,但在您的情況下,BaseAPI實例也以參數的形式存儲狀態。該BaseAPI類看起來更像是一個DAO相反,你可以很容易地在一個無狀態的事實現:

public class BaseAPI { 
    public String getData(Map<String, Object> params) 
    { 
     // Do your parameter mapping here, then fetch the data 
     return ""; 
    } 
} 

另外,提供ID參數作爲方法參數。

捆綁一些依賴注入機制,如彈簧,你的設計將會更加乾淨。