【SOLID原则前端中的应用】开闭原则(Open/Closed Principle)- vue3示例

开闭原则(Open/Closed Principle)在Vue 3中的应用

开闭原则(Open/Closed Principle,OCP)规定,软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
也就是说,我们应该能够通过扩展的方式来添加新功能,而不是通过修改已有的代码。
在Vue 3中,我们可以通过组合组件、插槽(slots)、和提供/注入(provide/inject)等机制来实现这一原则。

在这里插入图片描述

示例场景:通知组件的扩展

假设我们有一个基本的通知组件BaseNotification,我们希望在不修改这个组件的基础上,通过扩展的方式添加不同类型的通知(如错误通知、成功通知等)。

1. 创建基本通知组件 BaseNotification.vue
<!-- BaseNotification.vue -->
<template>
  <div :class="['notification', typeClass]">
    <slot></slot>
  </div>
</template>

<script>
export default {
  name: 'BaseNotification',
  props: {
    type: {
      type: String,
      default: 'info'
    }
  },
  computed: {
    typeClass() {
      return `notification--${this.type}`;
    }
  }
};
</script>

<style scoped>
.notification {
  padding: 20px;
  border-radius: 4px;
  margin: 10px 0;
}
.notification--info {
  background-color: #d9edf7;
  color: #31708f;
}
.notification--error {
  background-color: #f2dede;
  color: #a94442;
}
.notification--success {
  background-color: #dff0d8;
  color: #3c763d;
}
</style>
2. 创建特定类型的通知组件 ErrorNotification.vueSuccessNotification.vue

我们通过扩展 BaseNotification 来创建特定类型的通知组件,而不是修改 BaseNotification

<!-- ErrorNotification.vue -->
<template>
  <BaseNotification type="error">
    <slot></slot>
  </BaseNotification>
</template>

<script>
import BaseNotification from './BaseNotification.vue';

export default {
  name: 'ErrorNotification',
  components: {
    BaseNotification
  }
};
</script>
<!-- SuccessNotification.vue -->
<template>
  <BaseNotification type="success">
    <slot></slot>
  </BaseNotification>
</template>

<script>
import BaseNotification from './BaseNotification.vue';

export default {
  name: 'SuccessNotification',
  components: {
    BaseNotification
  }
};
</script>
3. 使用组件

在父组件中使用这些通知组件。

<!-- App.vue -->
<template>
  <div id="app">
    <BaseNotification type="info">
      This is an info notification.
    </BaseNotification>
    <ErrorNotification>
      This is an error notification.
    </ErrorNotification>
    <SuccessNotification>
      This is a success notification.
    </SuccessNotification>
  </div>
</template>

<script>
import BaseNotification from './components/BaseNotification.vue';
import ErrorNotification from './components/ErrorNotification.vue';
import SuccessNotification from './components/SuccessNotification.vue';

export default {
  name: 'App',
  components: {
    BaseNotification,
    ErrorNotification,
    SuccessNotification
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
总结

在这个示例中,我们通过以下方式实现了开闭原则:

  1. 基本通知组件 BaseNotification:这个组件是对扩展开放的,对修改关闭的。它提供了一个基础的通知样式,并通过type属性来控制不同类型的通知样式。

  2. 特定类型的通知组件 ErrorNotificationSuccessNotification:这些组件通过扩展BaseNotification来实现特定类型的通知,而不需要修改BaseNotification的代码。我们使用了插槽(slots)来传递内容,从而实现灵活的内容插入。

通过这种方式,我们可以在不修改已有代码的情况下,通过创建新的组件来扩展功能,完全遵循了开闭原则。这不仅使代码更加稳定和可维护,还提升了代码的可扩展性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中国植物志(80卷)

中国植物志&#xff0c;全书共80卷126分册&#xff0c;3700页&#xff0c;记载了我国301科3408属31142种植物学名、形态特征、生态环境、地理分布、经济用途和物候期等。是研究中国植物的重要论著&#xff08;截图仅部分&#xff09;。

VBA通过Range对象实现Excel的数据写入

前言 本节会介绍通过VBA中的Range对象&#xff0c;来实现Excel表格中的单元格写入、区域范围写入&#xff0c;当然也可以写入不同类型的数据&#xff0c;如数值、文本、公式&#xff0c;以及实现公式下拉自动填充的功能。 一、单元格输入数据 1.通过Value方法实现输入不同类型…

【Python】从文本字符串中提取数字、电话号码、日期、网址的方法汇总(全!)

我们在做数据清洗的时候&#xff0c;有时候会遇到将一堆文本中提取我们需要的内容&#xff0c;最常见的是&#xff0c;从一大段文本中提取出数字、电话号码、日期、网址等。而在Python中&#xff0c;正则表达式re&#xff0c;则可以满足我们从文本中提取数字、电话号码和日期等…

echarts实现3D柱状图(视觉层面)

一、第一种效果 效果图 使用步骤 完整实例&#xff0c;copy就可直接使用 <template><div :class"className" :style"{height:height,width:width}" /> </template><script>import echarts from echartsrequire(echarts/theme/…

《人人都是产品经理》:大产品

《人人都是产品经理》&#xff1a;大产品 产品之大时间之大空间之大&#xff1a;商业、产品、技术设计之大以写书为例 团队之大 回答一个问题 产品经理应该是管理者嘛&#xff1f;优点在于&#xff1a;缺点在于&#xff1a;总结&#xff1a; 如何让团队更加开心总结 产品之大 …

ChatGPT如何应用在谷歌seo?

ChatGPT在提升博客和创作效率方面非常有用。它可以帮助你快速生成吸引人的标题&#xff0c;确保内容第一眼就能抓住读者的注意力。不仅如此&#xff0c;ChatGPT还能根据你的主题生成详细的文章提纲&#xff0c;让你在写作时思路更加清晰。关键词优化也是它的强项&#xff0c;可…

hive内置函数

--查询hive的内置函数列表 show functions; --查询具体函数的使用描述 desc function extended 函数名 desc function extended current_database; 一.字符串函数 1.字符串的拆分 &#xff1a;split(); select split(hello,java;hi,bigdata,[,;]); [ ]内可以写多个分隔符 --…

【论文解读】Multiagent Multitraversal Multimodal Self-Driving: Open MARS Dataset

Open MARS Dataset 摘要引言Dataset CurationVehicle SetupData CollectionDataset Statistics Benchmark Task and ModelPlace RecognitionNeural Reconstruction Experimental ResultsVisual Place RecognitionNeural Reconstruction Opportunities and Challenges结论 摘要 …

7.2、指针变量的定义和使用

代码 #include <iostream> using namespace std; #include <string>int main() {//定义指针int a 10;//指针定义语法&#xff1a;数据类型 * 指针变量名int * p;//让指针记录变量a的地址p &a;cout << "a的地址为&#xff1a;" << &am…

恶意软件是什么意思?常见的恶意软件类型

您可能听说过很多有关恶意软件感染和运行服务器的危险的信息。但是&#xff0c;您可能还不清楚这在现实生活中意味着什么&#xff0c;或者该如何处理。让我们来了解一下&#xff1a;当人们谈论恶意软件时&#xff0c;他们真正指的是什么&#xff1f; 恶意软件是恶意软件的缩写&…

热网无线监测系统 SystemManager.asmx SQL注入漏洞复现

0x01 产品简介 热网无线监测系统是一种先进的热力管网监测解决方案,它通过无线通信技术实现对热力管网各项参数的实时监测和数据分析,以提高供热效率、降低能耗、保障管网安全。系统利用先进的传感器技术和无线通信技术,对热力管网中的温度、压力、流量等关键参数进行实时监…

【JAVA多线程】JDK中的各种锁,看这一篇就够了

目录 1.概论 1.1.实现锁的要素 1.2.阻塞队列 1.3.Lock接口和Sync类 2.各种锁 2.1.互斥锁 2.1.1.概论 2.1.2.源码 1.lock() 2.unlock() 2.2.读写锁 2.3.Condition 2.3.1.概论 2.3.2.底层实现 1.概论 1.1.实现锁的要素 JAVA中的锁都是可重入的锁&#xff0c;因为…

Google 发布了最新的开源大模型 Gemma 2,本地快速部署和体验

Gemma 2 是 Google 最新发布的开源大语言模型。它有两种规模&#xff1a;90 亿&#xff08;9B&#xff09;参数和 270 亿&#xff08;27B&#xff09;参数&#xff0c;分别具有基础&#xff08;预训练&#xff09;和指令调优版本&#xff0c;拥有 8K Tokens 的上下文长度&#…

Akamai+Noname强强联合 | API安全再加强

最近&#xff0c;Akamai正式完成了对Noname Security的收购。本文我们将向大家介绍&#xff0c;经过本次收购后&#xff0c;Akamai在保护API安全性方面的后续计划和未来愿景。 Noname Security是市场上领先的API安全供应商之一&#xff0c;此次收购将让Akamai能更好地满足日益增…

【C语言】extern 关键字

在C语言中&#xff0c;extern关键字用于声明一个变量或函数是定义在另一个文件中的。它使得在多个文件之间共享变量或函数成为可能。extern关键字常见于大型项目中&#xff0c;通常用于声明全局变量或函数&#xff0c;这些变量或函数的定义位于其他文件中。 基本用法 变量声明…

智能语音门锁:置入NV170D语音芯片ic 打造便捷生活新体验

一、智能门锁语音芯片开发背景 随着科技的飞速发展&#xff0c;传统门锁的局限性日益凸显&#xff0c;无法满足现代人对高效、安全生活的需求。在这样的时代背景下&#xff0c;智能门锁应运而生&#xff0c;它不仅继承了传统门锁的基本功能&#xff0c;更通过融入先进的科技元素…

YOLOv8改进 | 卷积模块 | SAConv可切换空洞卷积

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

市场规模5万亿,护理员缺口550万,商业护理企业如何解决服务供给难题?

干货抢先看 1. 据统计&#xff0c;我国失能、半失能老人数量约4400万&#xff0c;商业护理服务市场规模达5万亿。然而&#xff0c;当前养老护理员缺口巨大&#xff0c;人员的供需不匹配是很多养老服务企业需要克服的难题。 2. 当前居家护理服务的主要市场参与者分为两类&…

儿童无语言是否等同于自闭症?全面解析与认识自闭症

在探讨自闭症与儿童语言发展之间的关系时&#xff0c;我们首先需要明确的是&#xff0c;自闭症并非单一由语言缺失所定义&#xff0c;而是一个复杂的神经发育障碍&#xff0c;其核心特征包括社交互动和沟通能力的显著受损&#xff0c;以及重复、刻板的行为模式、兴趣或活动。 …
最新文章