Skip to content

简介

我们知道IOC控制反转是进行系统解耦行之有效的架构设计,也是应对大型业务系统开发的支撑工具

状态共享机制

在实际开发当中,会遇到三个场景的状态共享:组件内部状态共享组件之间状态共享全局状态共享。在传统的 Vue3 当中,分别采用不同的机制来实现,而在 Zova 中只需要采用统一的 IOC 容器机制

场景传统的Vue3Zova
组件内部状态共享ComposableIOC
组件之间状态共享Provide/InjectIOC
全局状态共享PiniaIOC

IOC容器

在 Zova 中有两类 ioc 容器:

  1. 全局ioc容器(简称为 app 容器):在系统初始化时,会自动创建唯一一个全局 ioc 容器。在这个容器中创建的 Bean 实例都是单例模式
  2. 组件实例ioc容器(简称为 ctx 容器):在创建 Vue 组件实例时,系统会为每一个 Vue 组件实例创建一个 ioc 容器。在这个容器中创建的 Bean 实例可以在组件实例范围之内共享数据和逻辑

Bean Class

Zova 采用模块化体系,Bean Class 都由不同的模块提供。注入模块内部的 Bean 时可以直接基于Class类型解析。在跨模块注入时可以基于Bean标识解析,而不是基于Class类型/文件路径解析,这样有利于实现模块之间的松耦合

因此,Zova 提供了两类 Bean Class:

  1. 匿名bean:使用@Local装饰的 class 就是匿名bean。此类 bean 仅在模块内部使用,不存在命名冲突的问题,定义和使用都很便捷
  2. 具名bean:除了@Local之外,其他装饰器函数装饰的 class 都是具名bean。Zova 为此类 bean 提供了统一的命名规范,并且分配了唯一的Bean标识,既可以避免命名冲突,也有利于跨模块使用

注入范围

Zova 提供了以下几种注入范围:

  1. app:在 app 容器中注入
  2. ctx:在 ctx 容器中注入
  3. new:总是创建一个新的 bean 实例

层级注入

注入范围还支持层级注入:

  1. host:在当前组件实例的 ioc 容器以及所有父容器中依次查找并注入 bean 实例
  2. skipSelf:在所有父容器中依次查找并注入 bean 实例

基于 MIT 许可发布