Dao,遗留代码中的服务层

时间:2015-01-27 07:00:33

标签: java spring ejb cdi

这个问题是关于业务层的设计。在遗留代码中实例化Dao或Service类的最佳方法是什么。 每个需要道或服务的班级都是新的,这是一个很糟糕的方法。 他们应该是无国籍的,单身。当然,我无法使用Spring,CDI,EJB或其他DI框架。 我的想法是这样的:

  • 工厂方法(单身人士)
  • Enum Singletone
  • 静态方法(恕我直言不良方法)

还有其他想法吗?

1 个答案:

答案 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;
    }

    ...
}