2024已过半,还没试过在vue3中使用ioc容器吗?

vue3,ioc · 浏览次数 : 15

小编点评

Vue3 已经非常强大和灵活了,但仍然引入了 IOC 容器,原因在于其可以解决一些 Vue2 中的痛点问题。 首先,Vue 官方不再推荐使用基于 Class 定义 Vue 组件的方式,主要是因为这种方式存在一些问题。例如,使用 Class 定义组件会导致组件之间的耦合性增加,使得组件的维护性和可重用性降低。此外,使用 Class 定义组件还可能导致命名冲突等问题。 然而,在业务层架构中,使用 Class 和 OOP 类型的 IOC 容器是有价值的。这是因为业务层需要处理复杂的业务逻辑和数据模型,而 OOP 提供了一种更加灵活和高效的方式来处理这些问题。通过在业务层中使用 Class 和 OOP 类型的 IOC 容器,可以实现更好的代码组织和管理,提高代码的可维护性和可读性。 具体来说,IOC 容器可以用于以下几个方面: 1. 全局状态和逻辑共享:通过将全局状态和逻辑放在一个 IOC 容器中,可以实现全局状态的统一管理和共享,避免不同组件之间直接访问造成的耦合性问题。 2. 组件实例共享:在组件实例中,可以通过 IOC 容器共享数据和方法等,方便不同组件之间的通信和协作。 3. 代码的组织和管理:通过将业务逻辑和数据模型封装在 Class 中,并使用 IOC 容器进行管理,可以提高代码的组织和管理效率,减少代码量和维护成本。 总之,虽然 Vue3 已经非常强大和灵活,但在业务层架构中,使用 Class 和 OOP 类型的 IOC 容器仍然是一种非常有用的技术手段,可以帮助开发者更好地处理复杂业务和数据模型。

正文

Vue3 已经非常强大和灵活了,为什么还要引入 IOC 容器呢?IOC 容器离不开 Class,那么我们就从 Class 谈起

Class的应用场景

一提起 Class,大家一定会想到这是 Vue 官方不再推荐的代码范式。其实,更确切的说,Vue 官方是不推荐基于 Class 来定义 Vue 组件。如图所示:

社区确实有几款基于Class定义组件的方案,但实际应用效果不理想,所以不被 Vue 官方推荐。这些有价值的社区实践在不同阶段给 Vue 开发带来了便利,同时也恰恰说明一个道理:

Class 不应该用在`视图层`,而是要用到`业务层`

两层架构设计

在面向大型的业务开发场景中,需要两个层面的架构设计:

  1. 视图层:这一层架构推荐使用<script setup>,因为通过编译器语法糖确实可以使用非常简明的代码来声明 props 和 emits 的类型
  2. 业务层:这一层与业务相关。大量的工程实践证明,对于业务的建模和抽象,OOP函数式更适合

因此,在 Vue3 中引入 IOC 容器和 Class,与 Vue 官方的说法并不相悖,只是在业务层架构中应用ClassOOP

两类IOC容器

Zova 提供了分层的 IOC 容器,具体而言,提供了两类 IOC 容器:

1. 全局容器

该容器与Vue App绑定,从而实现全局状态和逻辑的共享,因此可以直接代替pinia的能力

2. 组件实例容器

该容器与Vue组件实例绑定。提供组件实例级别容器的好处就是,在这个容器中的所有 Class 实例都可以在组件实例范围之内共享数据和逻辑

和 Mixins 的对比

下面是基于 IOC 容器的源码案例,可以与 Mixins 做对照分析:

1. 解决mixins的短板

使用过 Vue2 的用户可能对mixins比较熟悉。IOC容器可以解决 mixins 的所有短板:

  1. 不清晰的数据来源:在 IOC 中 Class 各司其职,可以很方便的对this溯源,定位其出处
  2. 命名空间冲突:在 IOC 中 Class 实例都有自己的变量名,自然没有命名冲突的隐患
  3. 隐式的跨 mixin 交流:通过 IOC 容器的托管,Class 实例可以非常方便的共享数据和逻辑,而且可以清晰定位其来源

2. 吸收mixins的长处

mixins虽然有许多短板,但是有一个长处,就是多个mixins之间共享数据和逻辑非常方便。组合式API虽然也能实现数据和逻辑的共享,但是一旦调用链层级深了,使用起来就不太方便

  • 我们可以看一张示意图:

如图所示,一个 Vue 组件使用了两个 Composables,然后这两个 Composables 又分别使用了两个 Composables。那么,如果要在这 6 个 Composables 中共享状态和逻辑是非常不方便的,无法满足复杂业务的需求

  • 我们再来看 IOC 容器的示意图:

如图所示,一个 Vue 组件对应一个 IOC 容器,在 IOC 容器中注入了 6 个 Class 实例。这些 Class 实例由于都被 IOC 容器托管,所以可以相互引用,从而方便共享状态和逻辑

额外好处

基于 Vue3 强大而且灵活的响应式系统,IOC 容器在创建 Class 实例时自动包裹一层 reactive,那么就可以收到如下好处:

  1. 不用ref/reactive:有了 IOC 容器的加持,定义响应式状态不再需要ref/reactive
  2. 不用ref.value:因为不用ref,自然也就不用再写大量的ref.value

概念辨析

有人说Zova中Java的味道很浓

其实,Zova 与 Java 的代码风格有显著的不同,体现在以下两个方面:

  1. 更少的装饰器函数:Zova 采用依赖注入与依赖查找相结合的策略,优先使用依赖查找,从而大量减少装饰器函数的使用
  2. 更少的类型标注:Zova 优先使用依赖查找可以达到化类型于无形的开发体验,也就是不需要标注类型就可以享受到类型编程的诸多好处,从而让我们的代码始终保持简洁和优雅,进而显著提升开发效率,保证代码质量

有人说前端的技术趋势是组合优于继承,所以引入IOC是不合时宜的

其实,从本质上来看,IOC 容器的核心架构理念就是组合。通过 IOC 容器的托管,这些 Bean 实例可以更加自由灵活的组合,可以更加便利的共享状态和逻辑

结语

那么,如果搬砖累了,就玩一玩支持ioc容器的vue3框架吧,尝试一下全新的开发体验。

Zova源码已开源,欢迎围观:https://github.com/cabloy/zova

Zova可以和任何UI库搭配使用,这里有一个daisyui的效果演示:https://zova.js.org/zova-demo/

与2024已过半,还没试过在vue3中使用ioc容器吗?相似的内容:

2024已过半,还没试过在vue3中使用ioc容器吗?

Zova 是一款支持 IOC 容器的 Vue3 框架。有了 IOC 容器的加持,定义响应式状态不再需要ref/reactive,也不再需要ref.value

文件系统(八):Linux JFFS2文件系统工作原理、优势与局限

liwen01 2024.06.23 前言 在嵌入式Linux设备中,经常使用jffs2文件系统来作为参数区的文件系统格式。至于为什么要使用jffs2来作为参数区的文件系统,我猜大部分人都没有做过多的思考。 jffs2在2021年被设计出来,距今已过二十多年,现在在嵌入式设备中它还在被大量使用、说明

OLOR:已开源,向预训练权值对齐的强正则化方法 | AAAI 2024

随着预训练视觉模型的兴起,目前流行的视觉微调方法是完全微调。由于微调只专注于拟合下游训练集,因此存在知识遗忘的问题。论文提出了基于权值回滚的微调方法OLOR(One step Learning, One step Review),把权值回滚项合并到优化器的权值更新项中。这保证了上下游模型权值范围的一

.NET Aspire 正式发布:简化 .NET 云原生开发

.NET团队北京时间2024年5月22日已正式发布.NET Aspire ,在博客文章里做了详细的介绍:.NET Aspire 正式发布:简化 .NET 云原生开发 - .NET 博客 (microsoft.com)[1]。.NET Aspire 是一个新的平台无关、语言无关的框架,旨在简化.NET

2024 Web 新特性 - 使用 Popover API 创建弹窗

Popover API 为开发者提供了一种声明式的方式来创建各种类型的弹窗。目前已在所有三大浏览器引擎中可用,并正式成为 Baseline 2024 的一部分。

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

6月21日-23日,2024华为开发者大会(HDC 2024)如期举行。在22日的【鸿蒙生态伙伴SDK】分论坛中,正式发布了【鸿蒙生态伙伴SDK市场】,其中蚂蚁数科旗下移动开发平台mPaaS(以下简称:蚂蚁mPaaS)在论坛中提出,已正式推出鸿蒙原生Beta版能力集,覆盖手机、IoT等终端,企业、机

第一作者解读|我们这篇Nature Communication背后的故事

2024年7月16日,大暑将至,立秋不远。我们基于Python的转录组学全分析框架的文章——"OmicVerse: a framework for bridging and deepening insights across bulk and single-cell sequencing"——正式在

2024 Selenium10个替代品

随着自动化测试需求的不断增长,Selenium作为广泛使用的自动化测试工具,虽然功能强大,但也存在一些限制和挑战。在2024年, 越来越多的替代工具涌现,它们提供了更高效、更易用的解决方案。那么,哪些替代品值得我们关注呢? 在自动化测试领域,除了Selenium,还有哪些工具能够满足我们的需求,并且

【2024最新】4000字搞懂sora!一张脑图贯穿!

话不多说,上图! 下面就是对sora的具体阐释: Sora是OpenAI推出的一款革命性的视频生成模型,能够根据文本指令、静态图像或视频生成长达60秒的完整视频。这一模型基于扩散式模型和自注意力深度学习机制,通过将视频片段转换为静态图像并去除噪音以达到清晰效果。 核心技术与功能 技术架构: Sora

Microsoft宣布将在开发人员会议上专注于.NET Aspire

2024年7月15日微软宣布,其开发执行团队将在下个月的开发者大会上聚焦于使用 .NET Aspire 的云原生开发,以及结合人工智能的“现代 SQL”在 Microsoft Fabric 中的应用。微软的 Visual Studio LIVE! 2024 大会不仅是一个会议,而是创新、学习和社区庆