【问题标题】:Dao, Service layer in legacy code [closed]Dao,遗留代码中的服务层 [关闭]
【发布时间】:2015-01-27 07:00:33
【问题描述】:

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

  • 工厂方法(单例)
  • 枚举单音
  • 静态方法(恕我直言,不好的方法)

还有其他想法吗?

【问题讨论】:

    标签: java spring ejb cdi


    【解决方案1】:

    如果它是无状态的,则将其设为单例或在每次需要实例时创建一个新实例都不会产生任何显着差异。使用这 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;
        }
    
        ...
    }
    

    【讨论】:

    • 如果我通过 new 创建对象,Java 将始终创建新对象(内存消耗)想象一下,您在 4 个另一个类中使用一个服务类,所以您有 4 个服务实例 + 4 个 dao 实例,而不仅仅是1 + 1。我什至应该关心它吗?
    • 不,你不应该。那是一小块内存:128 字节与 32 字节。
    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2010-12-05
    • 2017-06-07
    相关资源
    最近更新 更多