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

news/2024/11/19 21:18:49/文章来源:https://www.cnblogs.com/zhennann/p/18290770

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

Class的应用场景

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

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

Class 不应该用在`视图层`,而是要用到`业务层`
  • 以下是几款社区 Class 定义组件的方案,供参考:
    • vue-class-component
    • vue-facing-decorator
    • vue-property-decorator
    • nuxt-property-decorator

两层架构设计

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

  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 实例可以非常方便的共享数据和逻辑,而且可以清晰定位其来源
  • 参见:Vue3: 和 Mixin 的对比

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控制反转: BeanBase
    • 模块Scope

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

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

结语

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740805.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cpp查错误

使用Windows事件查看器调试崩溃 https://www.cnblogs.com/yilang/p/11993912.html1、2、生成.map看函数地址 3、map里找不到0xc0000409 4、 搜 异常代码 0xc0000409 5、堆栈设置

Vue3 如何接入 i18n 实现国际化多语言

如何在现有 Vue 3.0 + Vite 项目中,引入 i18n 实现国际化多语言,可以手动切换,SEO友好,且完整可用的解决方案。1. 基本方法 在 Vue.js 3 中实现网页的国际化多语言,最常用的包是 vue-i18n,通常我们会与 vue-i18n-routing 一起使用。 vue-i18n 负责根据当前页面的语言渲染…

【安全运营】企业钓鱼演练实践

一、 群智集锦 问:请教各位师傅个问题,你们多长时间做一次钓鱼演练?答:全员型的半年一次,小范围的一个季度一次;答:我们内部每月都有做钓鱼演练,主要针对新员工,钓鱼主题一般不改变,针对全员的时候会换一下套路;问:请教个问题,大家进行钓鱼演练统计是怎么统计展示…

植物大战僵尸 杂交版

下载地址:https://download.csdn.net/download/hello_hlqk/89525708?spm=1001.2101.3001.9500 植物大战僵尸杂交版是一款由B站UP主 @潜艇伟伟迷 基于原版植物大战僵尸魔改的塔防类游戏。这款游戏在保留原有游戏精髓的基础上,进行了大胆的创新和尝试。UP主将不同的植物进行了…

Modbus转Profibus模块连SmartPLC接汇川630伺服案例

Modbus转Profibus模块(XD-MDPB100)是一种通讯协议转换器,能够实现Modbus 协议与Profibus-DP协议的信息共享。汇川630伺服作为一种先进的运动控制设备,其平稳性和准确性获得了充分肯定。本文将详细分析怎么使用Profibus转Modbus模块(XD-MDPB100)连接SmartPLC以及配备汇川630…

6.20+rand()%10~7.8

集训、集训、集训忘了放假之前的事了 首先排除是因为点分治调破防了 (发现一写数据结构专题闲话就变月记了) 其实还有原因是每次写这东西到一半就会因为点睡眠就会不小心点成关机所以似了 换校区(放假) 说实话放的还挺久的 在衡水住的酒店,打了一下午崩铁 速成了一下超击破…

matlab中神经网络预测模型的调用

本章以一道多自变量的例题来表述如何用调用matlab的包进行神经网络预测 目录一、问题提出二、训练集,验证集和测试集三、使用神经网络进行训练1.导入数据2.选择训练方法四、结果解读1.性能图2.回归图3.训练方法比较4.保存结果五、进行预测 一、问题提出 如图所示,现在有401个…

常见的排序算法——堆排序

本文记述了堆排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 J.W.J Williams 提出了堆排序的算法,该算法利用了二叉堆有序的性质,将排序的过程分为先构建堆再排序的两个阶段。 先构建堆。从当前待排序范围一半的位置开始向第一个位…

vulnhub - JIS-CTF

泡面机vulnhub - JIS-CTF 这个靶场一共有5个flag 信息收集 靶机ip:192.168.157.172 kali ip:192.168.157.161 nmap 192.168.157.0/24 nmap -sT --min-rate 10000 -p- 192.168.157.172 sudo nmap -sT -sV -sC -O -p22,80 192.168.157.172一眼看到robots.txt User-agent: * Dis…

暑假进度表

7.8 个人赛打的还可以,就是F题敲得太慢了,最后差十分钟做出来。 补了一个重要但是原来没注意到的一个知识点 \(01bfs\) ,做了四道相关题,将F题写进了双端队列的内容中,感觉非常不错的一题。

私有云盘-可道云-安装和使用和数据迁移

私有云盘是什么 随着云计算和移动办公大潮的到来,iPad、智能手机等家庭联网设备不断增多,以及搭载小容量SSD笔记本电脑的流行,能够跨平台分享的个人云服务需求不断增长;而今天的个人云服务也已经极大丰富,从2TB的百度网盘到商务人士中流行的Dropbox和Box个人云,不但免费,…

比赛获奖的武林秘籍:04 电子类比赛嵌入式开发快速必看的上手指南

本文主要介绍了电子类比赛中负责嵌入式开发同学的上手比赛的步骤、开发项目的流程和具体需要学习的内容,并结合自身比赛经历给出了相关建议。比赛获奖的武林秘籍:04 电子类比赛嵌入式开发快速必看的上手指南 摘要 本文主要介绍了电子类比赛中负责嵌入式开发同学的上手比赛的步…