Java Dao,遗留代码中的服务层
这个问题是关于业务层的设计。在遗留代码中实例化Dao或服务类的最佳方法是什么。 在每一个需要Dao或服务的类中,新的是imho糟糕的方法。 他们应该是无国籍的,单身的。当然,我不能使用Spring、CDI、EJB或其他DI框架。 我的想法是这样的:Java Dao,遗留代码中的服务层,java,spring,ejb,cdi,Java,Spring,Ejb,Cdi,这个问题是关于业务层的设计。在遗留代码中实例化Dao或服务类的最佳方法是什么。 在每一个需要Dao或服务的类中,新的是imho糟糕的方法。 他们应该是无国籍的,单身的。当然,我不能使用Spring、CDI、EJB或其他DI框架。 我的想法是这样的: 工厂方法(单例) 枚举单音 静态方法(IMHO坏方法) 还有其他想法吗?如果它是无状态的,那么每次需要一个实例时都将其设置为单实例或创建一个新实例不会有任何显著的区别。使用这三种方法中的任何一种都会使代码的单元测试变得更加困难 如果DI是完全不可
- 工厂方法(单例)
- 枚举单音
- 静态方法(IMHO坏方法)
还有其他想法吗?如果它是无状态的,那么每次需要一个实例时都将其设置为单实例或创建一个新实例不会有任何显著的区别。使用这三种方法中的任何一种都会使代码的单元测试变得更加困难 如果DI是完全不可能的,那么您可以使用穷人的依赖注入来至少使您的代码可测试:
public class SomeService {
private SomeDao someDao;
/**
* Constructor used in production. Creates or looks up its own DAO
*/
public SomeService() {
this.someDao = new SomeDao();
}
/**
* Constructor used by unit tests, which can pass a mock DAO instance.
*/
public SomeService(SomeDao someDao) {
this.someDao = someDao;
}
...
}
如果我通过new创建对象,Java总是会创建新对象(内存消耗),假设您在另一个类中使用了4个服务类中的一个,那么您得到了4个服务实例+4个dao实例,而不仅仅是1+1。我应该照顾它吗?不,你不应该。这是一小块内存:128字节对32字节。