
# devspore-horizon介绍
扩展拦截功能依赖devspore-horizon组件实现。devspore-horizon是DevSpore开发框架提供的一种插件机制，用户可以在请求被处理前（Entry）和应答发送前（Exit）调用DevSpore预置的插件，也可以使用自己开发的插件，用于实现统一的操作前认证、鉴权，操作后消息发送、缓存更新、审计等功能。
#### 常用概念
DTO：是一种数据传输对象，主要用于在不同层之间传输数据。
DO：是一种领域对象，用于表示业务领域中的实体或概念。
#### horizon整体架构
devspore-horizon架构图如下：
图1架构图   
![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002166681777.png "点击放大")
- Entry类插件采用的是责任链模式（[chain of responsibility](https://refactoring.guru/design-patterns/chain-of-responsibility)），所有的插件按照被注册的顺序依次调用，其中有一个插件抛出异常则整个请求返回失败。
- Exit类插件采用的是观察者模式（[Observer](https://refactoring.guru/design-patterns/observer)），所有的插件作为观察者注册，DevSpore运行时库里的Publisher模块同时调用所有的观察者插件（插件可能被并发执行且执行的顺序随机），插件执行的结果不能影响请求返回。
 
#### 实现流程
devspore-horizon整体流程概括如下：
图2实现流程   
![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002137766288.png "点击放大")
#### 典型案例
devspore-horizon允许用户用内置的鉴权和消息发送插件，也支持用户自定义插件来自主实现鉴权（认证等）和消息发送（审计等）。
下图为一个典型的使用案例：
图3典型案例   
![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002131493102.png "点击放大")
#### 如何实现horizon功能
只要实现了相应接口，填写配置信息即可实现horizon功能。
如[图1]中描述，horizon开放了两种插件[入口拦截Entry插件](https://support.huaweicloud.com/devg-astropro/astropro_06_0016.html#astropro_06_0016__section12333114515405)和[出口拦截Exit插件](https://support.huaweicloud.com/devg-astropro/astropro_06_0016.html#astropro_06_0016__section1250717194429)**。**其中统一认证和统一鉴权需要实现Entry插件；而变更通知、更新缓存、统一审计、统一工作流需要实现Exit插件。
