2013-02-18 140 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参数作为方法参数。

捆绑一些依赖注入机制,如弹簧,你的设计将会更加干净。