password
Created
Feb 19, 2023 03:59 PM
type
Post
status
Published
date
Jul 19, 2021
slug
summary
SOLID原则
tags
其他
category
其他
icon
一. 单一职责原则 SRP
核心: 每个功能/模块/组件都应该只做一件事
- 将功能较多的大型组件拆分为较小的组件;
- 将与组件功能无关的代码提取到单独的函数中;
- 将有联系的功能提取到自定义 Hooks 中。
实际操作建议:
假如有这样的场景, 我们需要获取api接口的user数据, 并根据返回的user列表来过滤掉非活跃的用户, 然后根据活跃用户来展示一个列表
- 将数据获取的部分封装到一个独立的Hooks中
将user的API获取过程抽象到一个useUser的Hooks中
- 遍历的内容, 考虑到复杂性, 可以封装到独立的组件中
将列表渲染user信息的部分内容抽象到UserItem的组件中, 在主组件中进行遍历渲染
- 一些过滤和判断逻辑, 也可以封装到公共函数中
非活跃用户的过滤逻辑, 可以抽象到getOnlyActive函数中
二. 开放封闭原则 OCP
开放封闭原则指出 “一个软件实体(类、模块、函数)应该对扩展开放,对修改关闭”。开放封闭原则主张以一种允许在不更改源代码的情况下扩展组件的方式来构造组件。
例如: 有一个可以在不同页面上使用的 Header 组件,根据所在页面的不同,Header 组件的 UI 应该有略微的不同:
正常想法是我们在Header组件中进行判断来处理逻辑
但是更好的做法是开放出一个children/slot来让接入的组件进行插入
三. 里氏替换原则 LSP
子类型对象应该可以替换为超类型对象
四. 接口隔离原则
最小化系统组件之间的依赖关系,使它们的耦合度降低,从而提高可重用性。
五. 依赖倒置原则
要依赖于抽象,不要依赖于具体
一个组件不应该直接依赖于另一个组件,而是它们都应该依赖于一些共同的抽象
假如: 有一个表单登陆的组件, 我们常规写法是将登陆接口和登陆UI和表单校验等写在一起
但是更好的做法是将表单UI和校验与登陆分开, 并用一个上层组件来进行包裹它
也就是说: 登陆的组件不再依赖于API模块