【SOLID原则前端中的应用】接口隔离原则(Interface Segregation Principle,ISP)- vue3示例

接口隔离原则(Interface Segregation Principle,ISP)在Vue 3中的应用

接口隔离原则(Interface Segregation Principle,ISP)规定,客户端不应该被迫依赖于它不使用的方法。
换句话说,我们应该避免创建包含过多职责的“胖接口”,而应该创建细粒度的接口,使得每个接口只包含客户端实际需要的方法。

在Vue 3中,这可以通过将组件的职责分解成更小的、功能单一的组件来实现。
下面的示例,展示如何在Vue 3中应用接口隔离原则。

示例场景:用户信息展示和编辑

在这里插入图片描述

假设有一个组件,需要展示和编辑用户信息。
按照接口隔离原则,将这个需求分解成两个独立的组件:一个负责展示用户信息(UserDisplay.vue),另一个负责编辑用户信息(UserEdit.vue)。
这样,每个组件只包含与其职责相关的方法和属性。

1. 用户信息展示组件 UserDisplay.vue

这个组件只负责展示用户的信息。

<!-- UserDisplay.vue -->
<template><div class="user-display"><h2>{{ user.name }}</h2><p>{{ user.email }}</p></div></template><script>export default {name: 'UserDisplay',props: {user: {type: Object,required: true}}};</script><style scoped>.user-display {border: 1px solid #ccc;padding: 10px;border-radius: 5px;}</style>
2. 用户信息编辑组件 UserEdit.vue

这个组件只负责编辑用户的信息。

<!-- UserEdit.vue -->
<template><div class="user-edit"><label for="name">Name:</label><input id="name" v-model="localUser.name" /><label for="email">Email:</label><input id="email" v-model="localUser.email" /><button @click="saveUser">Save</button></div></template><script>import { ref, watch, toRefs } from 'vue';export default {name: 'UserEdit',props: {user: {type: Object,required: true}},setup(props, { emit }) {const { user } = toRefs(props);const localUser = ref({ ...user.value });watch(user, (newUser) => {localUser.value = { ...newUser };}, { deep: true });const saveUser = () => {emit('save', localUser.value);};return {localUser,saveUser};}};</script><style scoped>.user-edit {display: flex;flex-direction: column;gap: 10px;}label {margin-bottom: 5px;}input {padding: 8px;border: 1px solid #ccc;border-radius: 4px;}button {padding: 10px;border: none;border-radius: 4px;background-color: #007bff;color: white;cursor: pointer;}</style>
3. 使用组件

在父组件中组合使用 UserDisplayUserEdit 组件。

<!-- App.vue -->
<template><div id="app"><UserDisplay :user="user" /><UserEdit :user="user" @save="handleSave" /></div>
</template><script>
import { ref } from 'vue';
import UserDisplay from './components/UserDisplay.vue';
import UserEdit from './components/UserEdit.vue';export default {name: 'App',components: {UserDisplay,UserEdit},setup() {const user = ref({name: 'John Doe',email: 'john.doe@example.com'});const handleSave = (updatedUser) => {user.value = updatedUser;};return {user,handleSave};}
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

解释

在示例中,我用户信息展示和编辑的职责分解成两个独立的组件:

  1. UserDisplay.vue:这个组件只负责展示用户的信息,不包含任何编辑逻辑。
  2. UserEdit.vue:这个组件只负责编辑用户的信息,并包含保存逻辑。

通过这种方式,确保每个组件都有明确的职责,避免创建包含过多职责的“胖组件”。
这样做不仅使组件更加简洁、易于理解和测试,还可以在需要时更容易地对组件进行重用和维护。

在父组件 App.vue 中,我们组合使用了 UserDisplayUserEdit 组件,分别负责展示和编辑用户信息。这种方式遵循了接口隔离原则,使得每个组件只依赖于它实际需要的方法和属性。

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

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

相关文章

图形编辑器基于Paper.js教程07:鼠标画直线或移动路径

探索Paper.js: 使用鼠标绘制直线和轨迹 在数字图形设计和Web应用开发中&#xff0c;提供一个直观和互动的界面供用户绘制图形是极为重要的。Paper.js是一款功能强大的JavaScript库&#xff0c;它使得在HTML5 Canvas上绘制矢量图形变得简单快捷。本文将介绍如何使用Paper.js实现…

ubuntu cp 命令 拷贝文件

基本语法&#xff1a; cp [options] source destination source&#xff1a;源文件或目录 destination&#xff1a;目标文件或目录。如果是目录&#xff0c;则会将源文件复制到该目录下&#xff0c;并保持原有文件名。 以下是一些常用的cp命令选项&#xff1a; -f&#xff1…

DynamoDB常用权限分类详解

DynamoDB是AWS提供的一种完全托管的NoSQL数据库服务。为了确保数据的安全性和访问控制,AWS提供了一套细粒度的权限管理机制。本文将详细介绍DynamoDB的常用权限分类,并提供相应的JSON策略示例。 1. 表级权限 表级权限控制对整个DynamoDB表的访问。 1.1 读取权限 允许用户…

LT86101UXE 国产原装 HDMI2.0 / DVI中继器方案 分辨率 4Kx2K 用于多显示器 DVI/HDMI电缆扩展模块

1. 描述 Lontium LT86101UXE HDMI2.0 / DVI中继器特性高速中继器符合HDMI2.0/1.4规范,最大6 gbps高速数据率、自适应均衡RX输入和pre-emphasized TX输出支持长电缆应用程序,没有晶体在船上保存BOM成本,内部灵活的PCB TX巷交换路由。 LT86101UXE HDMI2.0/DVI中继器自动检测线缆损…

新时代【机器学习】与【Pycharm】:【随机数据生成】与智能【股票市场分析】

目录 第一步&#xff1a;准备工作 1.1 安装必要的库 小李的理解&#xff1a; 1.2 导入库 小李的理解&#xff1a; 第二步&#xff1a;生成和准备数据 2.1 生成随机股票数据 小李的理解&#xff1a; 2.2 数据探索与可视化 小李的理解&#xff1a; 2.3 数据处理 小李…

累计融资9000万,服务超4000万人,Empathy的企业发展和运作模式解析

干货抢先看 1. 老龄化加深背景下&#xff0c;国内对亲人离世后的关怀服务尚未受到行业重视。以Empathy为代表的数字平台通过提供一站式服务&#xff0c;获得了包括全球六大寿险公司的战略投资。 2. 结合数字技术&#xff0c;Empathy为亲人离世的家庭提供从葬礼策划、福利申请、…

可编程直流电源的恒压模式(CV)和恒流模式(CC)

本文介绍可编程直流电源的恒压模式&#xff08;CV&#xff09;和恒流模式&#xff08;CC&#xff09;。 可编程直流电源在硬件开发过程中经常被用到&#xff0c;通常&#xff0c;它有2种模式&#xff0c;恒压模式&#xff08;CV&#xff09;和恒流模式&#xff08;CC&#xff…

桌面记事便签哪款好 好用的桌面记事本app

很多人喜欢在桌面上记事&#xff0c;尤其是经常使用电脑的上班族&#xff0c;这样查看起来更加方便。但在网上众多的记事软件中&#xff0c;哪款才是最好用的呢&#xff1f; 在众多选择中&#xff0c;敬业签以其出色的功能和用户体验脱颖而出&#xff0c;成为很多人记事的首选…

Debezium报错处理系列之第111篇:Can‘t compare binlog filenames with different base names

Debezium报错处理系列之第111篇:Cant compare binlog filenames with different base names 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezium技…

【MySQL】MySQL索引失效场景

文章目录 前言一、说明举例1. 函数操作与索引失灵2. 数据类型错配3. LIKE操作符与通配符的陷阱4. OR逻辑运算的索引挑战5. 复合索引与最左前缀规则6. 特定比较操作符的局限 二、总结 前言 在数据库管理和优化的天地里&#xff0c;索引如同图书的目录&#xff0c;极大地加速了数…

从IE到Edge:微软浏览器的演变与未来展望

引言 浏览器作为互联网的入口&#xff0c;承载了用户访问网页、进行信息交流和使用网络服务的重要职责。微软作为全球科技巨头&#xff0c;其浏览器产品从最早的Internet Explorer&#xff08;IE&#xff09;到现代的Microsoft Edge&#xff0c;经历了多次演变&#xff0c;见证…

#数据结构 链表

单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决&#xff1a;长度固定的问题&#xff0c;插入和删除麻烦的问题 1、逻辑结构&#xff1a; 线性结构 2、存储结构&#xff1a; 链式存储 链表就是将 结点 用链串起来的线性表&#xff0c;链就是 结点 中的…

UE C++ 多镜头设置缩放 平移

一.整体思路 首先需要在 想要控制的躯体Pawn上&#xff0c;生成不同相机对应的SpringArm组件。其次是在Controller上&#xff0c;拿到这个Pawn&#xff0c;并在其中设置输入响应&#xff0c;并定义响应事件。响应事件里有指向Pawn的指针&#xff0c;并把Pawn的缩放平移功能进行…

《大语言模型》赵鑫

前言 大模型技术的发展阶段&#xff1a;统计语言模型&#xff0c;神经网络语言模型&#xff0c;预训练语言模型等 谷歌2017 年推出基于注意力机制的Transformer 模型。 OpenAI基于此&#xff0c;开始构建GPT系列模型&#xff0c; GPT-1能够通过“通用文本训练-特定任务微调”的…

Solidity: 引用类型, array, struct

数组 array​ 数组&#xff08;Array&#xff09;是Solidity常用的一种变量类型&#xff0c;用来存储一组数据&#xff08;整数&#xff0c;字节&#xff0c;地址等等&#xff09;。数组分为固定长度数组和可变长度数组两种&#xff1a; 固定长度数组&#xff1a;在声明时指定…

MySQL的慢sql

什么是慢sql 每执行一次sql&#xff0c;数据库除了会返回执行结果以外&#xff0c;还会返回sql执行耗时&#xff0c;以mysql数据库为例&#xff0c;当我们开启了慢sql监控开关后&#xff0c;默认配置下&#xff0c;当sql的执行时间大于10s&#xff0c;会被记录到慢sql的日志文件…

集中管理和分析日志:使用 ELK 套件构建强大的日志管理平台

集中管理和分析日志&#xff1a;使用 ELK 套件构建强大的日志管理平台 日志是监控和调试应用程序和系统的重要工具。集中管理和分析日志可以帮助你快速定位问题、了解系统运行状况和性能&#xff0c;并提高你的日志管理效率。ELK 是一个流行的日志管理解决方案&#xff0c;由 …

优选算法之技巧(一):双指针一:移位0与复写0

引用&#xff1a;我们之前学过快排&#xff0c;首先用三元取中&#xff0c;找(key)&#xff0c;然后就用到了双指针的方法来进行交换排序&#xff0c;那我们今天要讲的双指针其实大同小异&#xff0c;无非在数组中就变成了下标。 题一&#xff1a; 给定一个数组 nums&#xf…

LDR6020-VR串流线:开启虚拟现实新纪元的钥匙

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经从科幻概念逐渐走进我们的生活&#xff0c;成为娱乐、教育、医疗等多个领域的热门话题。而VR串流线&#xff0c;作为这一技术的重要组成部分&#xff0c;正逐步成为连接用户与高质量VR体验的关键桥梁…

pip的常用命令和常见问题的解决

常用命令 安装包&#xff1a;pip install package_name 例子&#xff1a;pip install requests 指定版本安装包&#xff1a;pip install package_nameversion_number 例子&#xff1a;pip install numpy1.19.4 升级包&#xff1a;pip install --upgrade package_name 例子&am…