【发布时间】:2015-01-27 07:00:33
【问题描述】:
这个问题是关于业务层的设计。在遗留代码中实例化 Dao 或 Service 类的最佳方法是什么。 在需要 Dao 或 Service 的每个类中都是新的,恕我直言,这是一种糟糕的方法。 他们应该是无国籍的单身人士。当然,我不能使用 Spring、CDI、EJB 或其他 DI 框架。 我的想法是这样的:
- 工厂方法(单例)
- 枚举单音
- 静态方法(恕我直言,不好的方法)
还有其他想法吗?
【问题讨论】:
这个问题是关于业务层的设计。在遗留代码中实例化 Dao 或 Service 类的最佳方法是什么。 在需要 Dao 或 Service 的每个类中都是新的,恕我直言,这是一种糟糕的方法。 他们应该是无国籍的单身人士。当然,我不能使用 Spring、CDI、EJB 或其他 DI 框架。 我的想法是这样的:
还有其他想法吗?
【问题讨论】:
如果它是无状态的,则将其设为单例或在每次需要实例时创建一个新实例都不会产生任何显着差异。使用这 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;
}
...
}
【讨论】: