这个问题是关于业务层的设计。在遗留代码中实例化Dao或Service类的最佳方法是什么。 每个需要道或服务的班级都是新的,这是一个很糟糕的方法。 他们应该是无国籍的,单身。当然,我无法使用Spring,CDI,EJB或其他DI框架。 我的想法是这样的:
还有其他想法吗?
答案 0 :(得分:2)
如果它是无状态的,那么每次你想要一个实例都不会产生任何显着差异时,将其设为单例或创建一个新实例。使用这3种方法中的任何一种都会使代码单元测试变得更加困难。
如果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;
}
...
}