设计原则:不要让有状态的类型绑架了无状态类型的生命周期

情况是这样的

  • 第一步:你学会了面向接口编程。
  • 第二步:如何实例化接口呢?你学会了工厂。
  • 第三步:你学会了万能的工厂:IOC。
  • 第四步:IOC 容器都提倡依赖注入,因此你也学会了。
  • 第五步:无状态的类型的生命周期被有状态的类型给绑架了。

无状态的类型的生命周期被有状态的类型给绑架了

企业应用中,大多数的类型都是无状态的,如:Controller、ApplicationService、DomainService、Repository,只有个别的对象才有状态,如:UnitOfWork。因为依赖的问题,按照传统的依赖注入方式设计这些类型,生命周期设置只能设置为最短的那个(木桶定理),第一次发现这种要求,让我很不爽,当时没有敢于违背这种做法,直到读过一些 JSP 和 Spring 的书,才坚定了我的信心,因为:JSP 的 Servlet 是单例的,Spring 默认管理的实例也是单例的。

假如我们把无状态的对象设置为单例,有状态的对象该如何管理呢?答案很简单:

  • 如果还是保留无状态到有状态的关联,引入一层抽象。
  • 去掉无状态到有状态的关联,采用函数调用级别的依赖(服务定位器)。

好处

本该如此,看着更爽了,AOP 可以使用的更广泛了,因为其成本低了。

原文地址:https://www.cnblogs.com/happyframework/p/3665387.html