扩展接口(Extension Interface):允许组件(一般是一些业务逻辑)导出多个接口,当开发人员扩展或者修改组件功能时,此模式能够有效的防止接口的膨胀和客户代码的破坏。
1.为什么使用扩展接口
A.把组件分发或集成到应用之后,组件的需求会出现不可预期的变化,若不能合理并详细的处理此类问题,将会对客户机代码发生较大的修改。相信多数架构设计师或系统分析师都遇到这类问题,并对这类问题头痛不已。
B.若新功能仅仅被少数应用使用,那么其他的应用程序必然招致不必要的时间和空间开销,以支持他们不需要的功能。
2.扩展接口应该达到的能力
A.当组件接口不改变,对组件的实现修改应该不影响现有使用组件的客户端代码;
B.当开发人员使用外部代码扩展组件时,不应该破坏原先组件的客户端代码;
C.组件功能的改变或扩展应该是相对的,既不能修改原有组件的接口,又不能改变原来组件的内部逻辑;
D.如果组件和使用组件的客户端代码分布在不同的网络节点,客户端使用组件代码应该使用同一接口远程访问或局部的访问组件。
3.解决方案
通过“扩展接口”导出组件功能,每个语义相关的操作集对应一个接口,组件应该至少实现一个扩展接口,为组件增加新的功能或者修改组件功能,应该增加一个扩展接口并导出而不是修改现有的扩展接口。且客户端通过使用它的扩展接口而非它的实现来访问组件。因此客户机依赖于组件的不同角色,组件中的角色由一个独立的扩展接口来表示。
4.结构
主要有以下4个部分构成:
A.组件:聚合和实现各种类型的和服务相关的功能。常将功能根据不同的类型划分成不同的角色;
B.扩展接口:对应于组件实现的每个角色均有一个扩展接口,扩展接口也隐式的规定了和客户机交互的规则;
C.根接口:一种特殊的扩展接口,一般由:1)核心功能,一般定义客户机获取扩展接口及在各种不同扩展接口间导航的规则,任何扩展接口必须实现
2).领域无关功能,如组件生命周期管理等;3)领域相关功能,和实际的业务逻辑相关联的功能模块;
D.客户机,客户机只能通过和扩展接口通讯从而实现和组件的交互。