前端宝典十五:设计模式之前端开发5大设计原则

本文主要是介绍前端宝典十五:设计模式之前端开发5大设计原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要探讨前端开发设计原则:
单一职责原则
开闭原则
里氏替换原则
接口隔离原则
依赖倒置原则

一、单一职责原则(Single Responsibility Principle,SRP)

1、介绍

一个类应该只有一个引起它变化的原因。这意味着一个类应该只负责一项特定的任务,避免将过多的功能集中在一个类中,提高类的内聚性和可维护性。

2、代码实例

// 用户数据存储类,只负责用户数据的存储
class UserDataStorage {storeUserData(userData: any): void {// 存储用户数据的逻辑console.log(`Storing user data: ${userData}`);}
}// 用户数据验证类,只负责用户数据的验证
class UserDataValidator {validateUserData(userData: any): boolean {// 验证用户数据的逻辑return true;}
}

3、实际应用场景

在前端开发中,比如一个表单组件,可以将表单的渲染逻辑、数据验证逻辑和提交逻辑分别放在不同的类中。这样当需要修改表单的验证规则时,只需要修改验证类,而不会影响到渲染和提交逻辑。

二、开闭原则(Open/Closed Principle,OCP)

1、介绍

软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着当有新的需求时,应该通过扩展现有代码来实现,而不是修改已有的代码。

2、代码实例

interface Shape {area(): number;
}class Rectangle implements Shape {constructor(private width: number, private height: number) {}area(): number {return this.width * this.height;}
}class Circle implements Shape {constructor(private radius: number) {}area(): number {return Math.PI * this.radius * this.radius;}
}class AreaCalculator {calculateArea(shapes: Shape[]): number {return shapes.reduce((total, shape) => total + shape.area(), 0);}
}

3、实际应用场景

在开发一个图表库时,可以定义一个抽象的图表接口,然后针对不同的图表类型实现这个接口。当需要添加新的图表类型时,只需要创建一个新的实现类,而不需要修改已有的代码。

三、里氏替换原则(Liskov Substitution Principle,LSP)

1、介绍

子类型必须能够替换掉它们的父类型。也就是说,在任何使用父类的地方,都可以用子类来替换而不会产生任何错误或异常。

2、代码实例

class Animal {move(): void {console.log('Animal is moving.');}
}class Bird extends Animal {move(): void {console.log('Bird is flying.');}
}class Dog extends Animal {move(): void {console.log('Dog is running.');}
}function makeAnimalMove(animal: Animal): void {animal.move();
}const bird = new Bird();
const dog = new Dog();makeAnimalMove(bird);
makeAnimalMove(dog);

3、实际应用场景

在开发一个游戏时,有一个角色类和各种子角色类。如果游戏中有一个函数接受角色类作为参数,那么可以传递任何子角色类的实例给这个函数,而不会影响游戏的逻辑。

四、接口隔离原则(Interface Segregation Principle,ISP)

1、介绍

客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。这可以避免实现不必要的方法,降低类之间的耦合度。

2、代码实例

interface Readable {read(): void;
}interface Writable {write(data: any): void;
}class File implements Readable, Writable {read(): void {console.log('Reading file.');}write(data: any): void {console.log('Writing to file.');}
}class Database implements Readable {read(): void {console.log('Reading from database.');}
}

3、实际应用场景

在前端开发中,如果有一个数据存储模块,可能有不同的存储方式,如本地存储和服务器存储。可以为它们分别定义不同的接口,避免在只需要本地存储功能的地方实现服务器存储的接口。

五、依赖倒置原则(Dependency Inversion Principle,DIP)

1、介绍

高层模块不应该依赖低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。这可以降低模块之间的耦合度,提高代码的可维护性和可扩展性。

2、代码实例

interface DataSource {fetchData(): any;
}class DatabaseSource implements DataSource {fetchData(): any {return { data: 'from database' };}
}class FileSource implements DataSource {fetchData(): any {return { data: 'from file' };}
}class DataProcessor {constructor(private dataSource: DataSource) {}processData(): void {const data = this.dataSource.fetchData();console.log(data);}
}

3、实际应用场景

在开发一个前端应用时,数据获取模块不应该直接依赖于具体的数据来源(如某个特定的 API),而是应该依赖于一个抽象的数据获取接口。这样当数据来源发生变化时,只需要修改具体的数据来源实现类,而不会影响到应用的其他部分。

这篇关于前端宝典十五:设计模式之前端开发5大设计原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103207

相关文章

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

使用Python和Tkinter实现html标签去除工具

《使用Python和Tkinter实现html标签去除工具》本文介绍用Python和Tkinter开发的HTML标签去除工具,支持去除HTML标签、转义实体并输出纯文本,提供图形界面操作及复制功能,需... 目录html 标签去除工具功能介绍创作过程1. 技术选型2. 核心实现逻辑3. 用户体验增强如何运行

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue