简介
IOC控制反转是进行系统解耦行之有效的架构设计,也是应对大型业务系统开发的支撑工具
状态共享: 4合1
在实际开发当中,会遇到四个范围的状态共享:组件内部、组件之间、全局、系统。在传统的 Vue3 当中,分别采用不同的机制来实现,而在 Zova 中只需要采用统一的 IOC 容器机制
| 状态共享范围 | 传统的Vue3 | Zova |
|---|---|---|
| 组件内部 | Composable | IOC |
| 组件之间 | Provide/Inject | IOC |
| 全局 | Pinia | IOC |
| 系统 | ES Module | IOC |
可能有人会问,
全局状态共享和系统状态共享有何区别?因为在 SSR 场景中,
全局状态共享是针对每一个Request而言的,系统状态共享则可以跨越Request
IOC容器
在 Zova 中有三类 ioc 容器:
sys容器:在系统初始化时,会自动创建唯一的 sys ioc 容器。在这个容器中创建的 Bean 实例都是单例模式app容器:在响应请求时,系统会为每一个请求创建一个 app ioc 容器。在这个容器中创建的 Bean 实例是请求级别的单例模式ctx容器:在创建 Vue 组件实例时,系统会为每一个 Vue 组件实例创建一个 ctx ioc 容器。在这个容器中创建的 Bean 实例可以在组件实例范围之内共享数据和逻辑
Bean Class
Zova 采用模块化体系,Bean Class 都由不同的模块提供
注入范围
Zova 提供了以下几种注入范围:
sys:在 sys 容器中注入app:在 app 容器中注入ctx:在 ctx 容器中注入new:总是创建一个新的 bean 实例
注入范围: 层级注入
注入范围还支持层级注入,替代 Vue3 Provide/Inject 的能力:
host:在当前组件实例的 ctx 容器以及所有父容器中依次查找并注入 bean 实例skipSelf:在所有父容器中依次查找并注入 bean 实例
注入方式
Zova 提供了两种注入方式:
依赖注入:通过@Use装饰器提供基于属性的依赖注入依赖查找:直接通过 ioc 容器查找所需要的 bean 实例,如果没有就自动创建