知识卡片
服务层与会话外观的设计动机差异
内容
服务层容易和J2EE设计模式文献里的”会话外观”(Session Facade)混为一谈,但两者的设计动机完全不同。会话外观诞生的目的是避免对实体Bean的过多远程调用造成性能损失——它把会话Bean和实体Bean的操作胶合在一起,对外提供一个粗粒度接口,本质是一种应对EJB远程调用性能问题的技巧性补丁。服务层的设计动机则是通过把职责细分(尤其是把”领域逻辑”和”应用逻辑”分开)来避免冗余代码、提高领域对象类的可复用性——它是一个软件架构层面的模式,而不是针对某个具体技术缺陷的技巧。二者的历史渊源也印证了这一点:服务层的设计思想来自Alistair Cockburn的”应用边界”模式,这个思想比EJB出现还要早三年,根本不是为了解决EJB的远程调用性能问题而生。会话外观和服务层在表现形式上可能有相似之处(都提供粗粒度接口),但名称、应用范围和实际用途都不一样,不应该把二者当成同一个模式的两种叫法。可迁移启发:两个模式表面形态相似(都是”粗粒度外观”)不代表它们解决的是同一个问题——追溯一个模式的历史起源和最初要解决的具体困境,往往比单看它现在的结构形态更能判断它是否适用于当前场景。
参考来源
- 位置:《企业应用架构模式》第二部分"模式"之"第9章 领域逻辑模式"之"9.4.1 运行机制"(源文件:_epub-src/OEBPS/Text/000071.html)
- 结论依据:原文说明"服务层与J2EE设计模式文献中所提及的会话外观是有区别的。会话外观的设计动机是避免过多对实体beans的远程调用导致性能损失……服务层的设计动机却是通过职责的细分来避免冗余代码和提高可重用性;它是一个软件架构级的模式,而非技巧性的模式。事实上,服务层的设计思想来自于应用边界模式,而后者的出现要比EJB早三年",直接支撑本卡结论。
- 原始内容:会话外观可能与服务层有某些相通之处,但无论名称、应用范围还是实际应用都不相同。