前言
作为一名前端攻城师,组件封装应该是每个前端er都干过的事情了,同时组件复用也是团队协作中避不开的一环。
本人工作三年来可以说是阅组件无数了(吹🐂的),最近半年也是完成了整个团队的组件库搭建,对如何封装一个好用的组件有一定的心得,如果下面有哪些地方说的不妥的,希望观众姥爷们积极指正哈。
接下来,引入正题:如何封装一个好用的组件呢?
整体流程
话不多说,上图:
我将组件开发分为三个阶段:编码前准备工作、编码、编码后。
第一阶段:编码前准备工作
一个需求迭代过程中前端er正常开发流程:将产品经理给的需求理解清楚 -> 对需求进行模块划分 -> 拆解子任务 -> 拆分组件。
那拆分组件之后应该怎么做呢?
业务需求分析
相信一些工作经验不怎么丰富的同学大都是直接开始编码了,而缺少了非常重要的一个步骤:业务需求分析。
其实只有对要编写的组件进行完整的需求分析,我们才能更加深入的理解组件的应用场景,以及对未来可能发生的变更做好提前设计。
虽然未来会怎么变化并不完全由我们决定,但我们如果能对未来大概率会发生的变化做好提前设计,相信是能够帮助我们更好的设计组件。我个人是非常反感一个组件编写完之后来回修改的,这大大的增加了bug率和重构的风险。。
业务抽象
那我们该如何验证需求是否分析清楚了呢?这时候可以尝试对要编写的组件进行适当的业务抽象,可以是一张脑图,逻辑表达清楚即可。
业务抽象可以很好的考验开发者对需求的理解程度。哪一块的逻辑应该抽离出来复用,组件的核心数据流向是怎么样的,如何保证代码的分层和复用,怎么去降低组件的复杂度等等,都是需要考虑的问题。
个人认为业务抽象的核心前提是需要对业务需求理解的比较透彻,然后才是遵循一定的开发原则,比如:单一原则、开放封闭原则等。
如果是开发一些纯UI性质的组件,在抽象的过程中,也需要结合自己公司的UI规范,符合整体的UI设计。
使用API定义
如果你能够将前两个步骤捋清楚,这一步我相信你是能够信手拈来的。
很多刚入职的同学在开发组件的过程中,往往是开发完成之后才确定下来组件对外暴露的API。这其实是一种比较错误的做法,正确的做法应该是以终为始,在真正编码前定下具体的API,这样在开发的过程中才会明确目标。
API如何定义?这里需要开发者站在用户的角度上思考问题。你的同事就是用户,反过来说你自己就是第一个用户。
这个组件对使用者来说怎么样才算好用?市面上有没有类似可借鉴的组件?组件要传的参数是不是太多了?如何保证以后的扩展性,有没有预留一些字段?等等这些问题,都是需要考虑进来的。当然,这也是需要一定经验的积累,我相信没有哪个人一开始就能开发出特别完美的组件。
第二阶段:编码
编码这个过程对我来说是最快乐的时光了😄,因为我们将第一阶段的内容理清楚之后,编码就是纯粹体力活~。
代码设计
代码设计这个步骤对于开发复杂组件来说还是非常重要的,而且这对个人能力的提升也很重要。
我曾见过不少人拿到需求之后,不管需求简单还是复杂,一顿操作猛如虎。然后code review的时候,代码可读性极差,一问代码如何设计的,问就是没有设计,一口老血差点喷出来。
代码设计不在这里做过多的赘述,推荐大家一本曾探的《Javascript设计模式与开发实践》,或者移步我之前写的一篇文章《React最佳实践》,相信能够给大家一些启发。
编码
编码就是一件苦差事了,不过我个人也是乐在其中哈哈。
如果组件中有什么重难点,我相信是能够在代码设计阶段识别到的。如果没有及时识别到,这个时候需要反思是不是代码设计的粒度太大了,遗漏掉了部分关键技术?或者是因为某些方面知识的欠缺导致的?
这个时候也不用慌,及时的向上反馈暴露风险点(这点很重要),百度就好。
第三阶段:编码后
编码完并不意味着结束,保证良好的自测习惯能够让测试er对你刮目相看。
自测 + 测试用例
组件编码完成后,我们此时应该站在测试的角度,尝试并输出一份自测用例。自测用例与测试用例并不冲突,开发的自测用例是能够更好的帮助测试人员完善测试用例的。
自测用例不仅可以快速的帮助我们发现一些缺陷,也可以让我们重新审视一下写的组件符不符合之前的设计?有没有脱离实际的业务场景?有没有漏掉的点等等。
如果没有写过自测用例的小伙伴推荐大家读读这篇文章:《如何编写好的测试用例》
如果时间允许的话,最好是还能够适当的补充一些单元测试,保证组件的代码质量。
编写文档
为什么要去编写文档?组件文档是能够快速帮助他人或者自己提升工作效率的,避免每次复用组件前都需要读一遍代码。
文档这一块大家可以根据实际情况来定,写在readme或者组件注释里面也是可行的。
这里给大家安利一个非常容易上手的组件文档编写库:storybook。基本上是开箱即用,我自己也是使用它来搭建我们团队组件库的文档。
发布
最后就是发布环节啦,其实很简单,只需要将组件库npm publish即可。
对于文档的发布则需要对组件库进行打包,然后发布到指定的CDN上面。
总结
整个组件的开发流程就跟大家讲明白啦,核心其实就是业务抽象和API定义。业务抽象是一个承上启下的环节,既考验开发者对需求的理解程度,也需要开发者对组件逻辑进行清晰的划分。而API定义则更多是需要有用户的视角,站在用户的角度上看问题,通过以始为终来把握整体的代码节奏。
最后,希望这篇文章能够帮助到你😁,如果文章中出现有纰漏的地方希望大家积极指正~
顺便帮忙点个赞,谢谢~