写在前面的话
写了好多年业务,想输出一套前端的UI组件,但是对组件这个概念不是很深入了解,所以参考了很多资料,以及结合自己的理解,做出归纳和总结。所以才有了这一篇,从什么是组件,到什么是软件中的组件化设计,再到组件设计中有什么优势和挑战,到最后如何构建一套出色的组件系统。每个人的想法都不是一样的,所以这一套组件设计思想,可能也并不完善,仅作为大家的参考,也欢迎大家补充。
什么是组件?
这就是我们现实生活中,最形象最贴切的物品了。
图一是一堆齿轮驱动的机器,每个齿轮都是单独存在的,如果一个齿轮坏了,我们只要替换下来换一个好的就好了,这个机器一样跑起来啦。
图二是个人PC的主板,大家也特别熟悉,对于插在主板上的每一个单独功能的组件,如果坏了一个,可以换一个好的,通过插槽替换上去,也可以跑起来了
所以生活中有很多组件的实体,我们看看这些关于组件的定义:
1. 供装配整台机器、构件或元件的零件组合
2. 在电子或机械设备中组装在一起形成一个功能单元的一组元件
3. 组装产品(如书橱或碗橱)时所组合的通常或多或少重复的部分
4. 可被组装或被重新组装的几个部件之一
这些都是我们看得到,摸得到的,下面我们再跳出现实表象,上升到一个更高的层面去看问题(这样的高逼格的说法叫抽象)
图三:是一个完整的中国地图,地图上每个省级的地域,我们不管你在这片区域是平原、高山、还是海岛、还是大海等,只要你属于规划范畴,那么就属于一个省级区域,由这些区域组成了我们一个完整的国家,丢一块都不行。我们可以把每个省级抽象成一个组件,国家机器,就是由这些组件一起跑起来的。
我们将信息进行汇总和整理,得出如下结论:
1. 从外观和功能上来讲,他们都是一个独立的部分,可能是零件或者是原件
2. 从行为上来讲,他们拥有组装这个属性,可以和其他组件相互组合
3. 可以被重新组装,重复利用
当然我们做软件设计的,也是通过参考现实,抽象到软件设计中,然后根据落地环境,去实现组件化设计思想,前人已经走在了路上,去摸索这块土地,也获得了一些实用的理论,比如基于组件的软件工程(Component-based software engineering,简称CBSE)或基于组件的开发(Component-Based Development,简称CBD)的软件开发范型等等,有兴趣的可以自己去看下。
下面是前人对组件的定义:
1. 一个不透明的功能实体,能够被第三方组装,且符合一个构件模型。 — 卡耐基梅隆大学