2014-01-21 33 views
3

我有一个方法,在我的代码中使用3-4次,来自不同的位置。通常会为此引入静态实用程序方法,我也这样做。公用数据库/ dao方法应该是静态的吗?

但我不知道这是一个很好的做法,如果这个静态方法执行一些数据库/道数逻辑?以下是一个伪代码示例:

class DaoUtiliy { 

    public static void updateToDB(List a, List b) { 
     Dao dao = new Dao(); 
     dao.open(); //begin transaction  

     //create some variables using the list a, that are used to fetch the db entry: 
     String time, String date; //some more 
     Entity entity = dao.find(time, date); 

     //update anything in that entity; 
     entity.setProperty(b.get(0)); 

     dao.close(); //commit transaction 
    } 
} 

您是否也将此方法应用于静态方法?或者宁可创建一个new DaoService().updateToDB(a, b); anc从需要它的地方调用此方法?

+0

所以你在Dao的构造函数中分配Hibernate会话?或者他们在一个ThreadLocal的某个地方抓住它? – Affe

+0

我在实例化中获取dao本身的EntityManager':EntityManager em = EMUtil.get();' – membersound

+0

和EMUtil从它获取???我要去的地方是,虽然这很好,但您无法随着需求的增长和项目的发展而改变会话生命周期或扩展工作单元的范围。你被耦合到被定义为独立静态方法的所有工作单元中,这会变得很难看。 – Affe

回答

4

我喜欢在DAO非静态方法有以下原因

  1. 使他们非静态使得它更容易注入使用框架值,比如Spring
  2. 编写单元测试用例是因为静态方法不容易不能被覆盖
  3. 此外,如果你想扩展你的DAO的功能,覆盖静态方法是不可能的。
相关问题