简介
我们知道IOC控制反转
是进行系统解耦行之有效的架构设计,也是应对大型业务系统开发的支撑工具
状态共享机制
在实际开发当中,会遇到三个场景的状态共享:组件内部状态共享
、组件之间状态共享
、全局状态共享
。在传统的 Vue3 当中,分别采用不同的机制来实现,而在 Zova 中只需要采用统一的 IOC 容器机制
场景 | 传统的Vue3 | Zova |
---|---|---|
组件内部状态共享 | Composable | IOC |
组件之间状态共享 | Provide/Inject | IOC |
全局状态共享 | Pinia | IOC |
IOC容器
在 Zova 中有两类 ioc 容器:
全局ioc容器
(简称为 app 容器):在系统初始化时,会自动创建唯一一个全局 ioc 容器。在这个容器中创建的 Bean 实例都是单例模式组件实例ioc容器
(简称为 ctx 容器):在创建 Vue 组件实例时,系统会为每一个 Vue 组件实例创建一个 ioc 容器。在这个容器中创建的 Bean 实例可以在组件实例范围之内共享数据和逻辑
Bean Class
Zova 采用模块化体系,Bean Class 都由不同的模块提供。注入模块内部的 Bean 时可以直接基于Class类型
解析。在跨模块注入时可以基于Bean标识
解析,而不是基于Class类型/文件路径
解析,这样有利于实现模块之间的松耦合
因此,Zova 提供了两类 Bean Class:
匿名bean
:使用@Local
装饰的 class 就是匿名bean
。此类 bean 仅在模块内部使用,不存在命名冲突的问题,定义和使用都很便捷具名bean
:除了@Local
之外,其他装饰器函数装饰的 class 都是具名bean
。Zova 为此类 bean 提供了统一的命名规范,并且分配了唯一的Bean标识
,既可以避免命名冲突,也有利于跨模块使用
注入范围
Zova 提供了以下几种注入范围:
app
:在 app 容器中注入ctx
:在 ctx 容器中注入new
:总是创建一个新的 bean 实例
层级注入
注入范围还支持层级注入:
host
:在当前组件实例的 ioc 容器以及所有父容器中依次查找并注入 bean 实例skipSelf
:在所有父容器中依次查找并注入 bean 实例