前端组件设计之理论篇

  • 前言
  • 一、什么是前端组件
  • 二、组件设计原则
    • 1、单一职责
    • 2、封装
    • 3、组合
    • 4、复用
    • 5、富有意义
    • 6、可测试
  • 三、总结

前言

什么是前端组件?对于一个前端开发人员来说再熟悉不过了。是的,“再熟悉不过”,但是当让你尝试具体描述下呢,我想大多数人脑袋中可能只有“组件化”这三个字,其他信息都模模糊糊,根本没有一个整体和结构性的概念;就拿Vue的开发者来说,脱口而出的可能是“每个.vue文件就是一个组件···”等等,很明显这并不是我想要的答案!

大多数人可能在实际开发中知道怎么开发一个组件,因为这都是实践后的经验,但是这些经验都是片段化的:

1、没法形成整体思维,无法说出一二,可能连面试都应付不了;

2、容易形成经验主义,复用到不合适的场景和业务;

3、容易开发出“四不像”组件,比如功能不完整、过度依赖等;

针对,上述问题,本文将从理论上系统的讲述下组件设计相关知识,希望对开发者能有所帮助!

一、什么是前端组件

就前端开发而言,组件可以简单的描述为视图逻辑和非视图逻辑的集合。视图逻辑即样式代码和视图交互部分,用于组件样式和交互动作的渲染,非视图逻辑可以看做数据处理逻辑和交互处理逻辑代码。视图和数据的结合构成了一个完整的前端组件。

二、组件设计原则

“一个组件的复杂度,主要来源就是自身的状态;即组件自身需要维护多少个不依赖于外部输入的状态。”——组件复杂度。

无论组件简单还是复杂,都需要遵循一定的原则进行设计和开发才能保证组价的合理性。关于组件设计的原则往上有太多好文,这里也不过的解读。这里是经过自己简单整理,然后按照开发习惯的罗列,主要有以下原则:

1、单一职责

很多软件开发设计类的原则中都强调单一职责这条原则,这是现代软件开发中不可或缺的一条准则。单一职责强调一个组件具备一项“能力”,比如输入框组件具备输入数据能力。

单一职责可以保证组件是最细的粒度,且有利于复用。但太细的粒度有时又会造成组件的碎片化。因此单一职责组件要建立在可复用的基础上,对于不可复用的单一职责组件,我们仅仅作为独立组件的内部组件即可。

单一职责同时也具备简化组件的能力,遵守该原则在一定程度上能够使代码足够简单,意味着易读、易维护。

2、封装

良好的组件封装应该隐藏内部细节和实现意义,并通过props来控制行为和输出(单向数据流)。同时还要具备减少访问全局变量能力,因为访问全局变量会打破封装,创造了不可预测的行为,并且使测试变得困难。可以将全局变量作为组件的props,而不是直接引用。

封装能够将不用逻辑代码分离,能够帮助开发中快速定位问题。

3、组合

单一责任原则描述了如何将需求拆分为组件,封装描述了如何组织这些组件,组合描述了如何将整个系统粘合在一起。

具有多个功能的组件,应该转换为多个单一职责的小组件, 这些小的组件又可以组合成为一个职责更大、功能单一的组件,比如时间选择组件就是由选择组件、输入组件等组合而成;

4、复用

通常来说我们进行组件设计的目的有两种:

1)抽取公共功能部分,方便复用(例如基础组件);

2)复杂设计/功能分解,便于代码管理和提高代码阅读性(例如业务组件);

本篇文章中所将的更多的是针对第一个目的而言,提高组件的复用性,使得一处代码的封装能够在各个不同的地方使用。复用性能够使代码的修改/编辑更加方便,只需要修改组件代码,各个引用的地方会同步进行修改和更新。

5、富有意义

富有意思更多的是指代码的描述意义和可读性。在实际开发中,开发人员大部分时间都在阅读和理解代码,而不是实际编写代码。

有意义包含的范围很广,凡是有助于代码理解和使用的都可以归为有意义,例如:

  • 项目名、函数名、变量名、类名等使用符合含义的命名;
  • html语义化;
  • 合理的代码注释;

6、可测试

现在前端开发过程中一直都在强调单元测试,一个完整的项目单测是不可缺少的一部分,单测可以保证代码正确性、一部分依赖的正确性、以及减少调试时间等。

单元测试的目的不是为了代码覆盖率,而是为了减少bug出现的概率,以及防止bug回归。小公司人力不足,不应该盲目为了提高覆盖率浪费人力,而是要写关键代码的关键测试。

而对于组件而言,如果一个组件测试不易于测试,很大可能是组件设计存在问题。

三、总结

本文主要从前端开发的角度介绍了什么是前端组件和前端组件开发的原则。一个合理的组件设计大都遵循这些原则,只有理解这些原则之后才能在实际开发中潜移默化的使用这些原则,让我们开发的组件更加合理,同时也会加深自己对前端组件化的理解。

前端组件设计之理论篇相关推荐

  1. 饿了么ui组件中分页获取当前选中的页码值_【Web技术】314 前端组件设计原则

    点击上方"前端自习课"关注,学习起来~ 译者:@没有好名字了译文:https://github.com/lightningminers/article/issues/36,http ...

  2. [译] 前端组件设计原则

    原文地址:Front end component design principles 原文作者:Andrew Dinihan 文中示例代码:传送门 限于个人能力,如有错漏之处,烦请不吝赐教. 前言 我 ...

  3. 面试官: 说一下前端组件设计的原则

    前言 我在最近的工作中开始使用 Vue 进行开发,但是我在上一家公司积累了三年以上 React 开发经验.虽然在两种不同的前端框架之间进行切换确实需要学习很多,但是二者之间在很多基础概念.设计思路上是 ...

  4. 软件架构设计之理论篇

    在上篇文章<软件架构设计之思想篇>中,Relax君通过盖房子做了一个类比,聊到了在进行架构设计中我们该从哪些方面去考虑,文中提到了系统.子系统.层次结构.组件.模块.接口和部署等等这样一些 ...

  5. 重构,改善既有代码的设计(理论篇)

    文章目录 前言 重构是什么? 谈谈定义 何时重构? 常用重构手法 提炼函数(Extract Method) 以查询取代临时元素(Replace Temp with Query) 分解条件表达式(Dec ...

  6. 领域驱动设计-原理心得篇

    "最初我给本文起的标题是<领域驱动设计-理论入门篇>,但是文中掺杂了太多的个人理解,入门篇就显得太官方了,为了避免错误的理解把读者带偏,所以改成<领域驱动设计-理论心得篇& ...

  7. React 组件设计指南

    前言 在我过往的经历里, 在面试与被面之间通常都会夹杂一些关于组件设计方面的问题, 但通常面试官和候选人都只能通过一些实际的项目经历来就设计进行讨论, 相比服务端面试中可能还涉及一些设计原则和基本思路 ...

  8. 理论篇一: 如何设计游戏棋牌平台 - 服务端 - 简介

    大家好,今天开始我将会为大家带来(如何设计棋牌游戏平台)系列的理论的文章. 既然说到理论篇,后面就一定会为大家带来实战篇. 整个系列下来时间会持续比较长,我将会与我的前端合作伙伴进行一个联合作战的方式 ...

  9. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计

    目录:   1. 架构选型     2. 架构目录介绍     3. 架构说明     4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...

最新文章

  1. 亿级PV超大型网站集群架构图形深度揭秘讲解
  2. linux双机热备 oracle,oracle for linux双机热备实战
  3. 物联网有哪些技术 物联网跟云计算人工智能有什么关系
  4. java面试题24 关于Java中的数组,
  5. C++之面向对象模型
  6. android中如何执行java命令
  7. redis的压缩列表源码ziplist解析
  8. 如何学习-我是这样学JS理论![不看后悔篇]
  9. 2017-06-30
  10. webpack5学习与实战-(一)-webpack的初步认识
  11. win10鼠标主题linux,大师还原win10系统安装鼠标指针主题包的操作步骤
  12. 使用深度学习技术进行水印去除
  13. 28、ZigBee 开发教程之基础篇—红外对射计数器
  14. apple pencil_如何检查Apple Pencil的电池电量
  15. 手撸springmvc乞丐版
  16. 计算机课教学常规要求,2020学校教学常规管理制度
  17. 买卖股票的最佳时机 II Java (贪心算法)
  18. 论文阅读:Seraph: Enabling Cross-Platform Security Analysis For EVM and WASM Smart Contracts
  19. 差分时钟、DQS与DQM - DDRx的关键技术介绍
  20. iOS15 切换上架App图标的最新方案

热门文章

  1. 基于EasyX实现的字符统计器(条形统计图)
  2. 人工鱼群算法参数寻优及可视化(Matlab代码实现)
  3. c语言编程有向图的入度 出度,有向图中各点的出度和入度
  4. 探索“绿色计算”前沿技术,清华AIR、英特尔联合发力
  5. 手机计算机网络为什么神奇,神奇的小配件,手机壳指环扣为何如此火爆?
  6. Spark远程调试+页面监控--用最熟悉的方式开发Spark应用
  7. 命令方块召唤别墅指令_郴州别墅加电梯什么价品质更好_湖南梯井电梯
  8. Android Animation (动画设计)
  9. 毕业设计思路+PPT(某信息化企业网络规划设计)
  10. 程序员 论坛 常见 英文缩写