我之前在做业务需求的时候,很多的个性化需求并不能快速响应,实现后有时也很难保证系统的可阅读性。不过好消息是,我今年在做京东内容领域的组件化改造和能力输出,之前的问题或许会得到根本性的解决。那么,接下来我将分享一些个人对于组件化的认知,希望能帮助到你。
一、什么是组件
组件,它是基于可复用、可插拔为目标的功能单元,同时具有清晰的职责和上下文边界。当然组件颗粒度把控也是一门学问,太大和太小都会直接影响到重用性和复杂性,所以组件一般为某个业务域下具体的、能独立提供服务的产品或者模块。
比如,我们日常使用的统一规范、代码自动生成器、分库分表组件、连接池组件、SQL拦截组件、多级缓存代理组件等等都是组件。
二、什么是组件化
1、将没有实现组件化目标的业务功能转化为符合组件化目标的功能单元的过程。
2、抽离可组件化的界面元素, 组成一个前端组件库。
3、从业务开发中抽离出纯技术的可复用技术组件的过程。
比如,内容创作基础能力提供通用服务,然后定义出一系列扩展点,包括语言包(中文、英文、泰文等)、创作页面配置(图片、富文本、话题、商品、视频等)、表单字段基本校验(字数限制、格式限制)、内容校验规则配置(黑名单、图片文本、商品好评率等)等,然后不同的垂直业务身份就可以通过实现扩展点进行编排,从而达到自助式开发的快速试错。此时,我们就可以说它具备很好的组件化能力。
显然组件化的方式更具备扩展性,更能适应各种场景和快速响应新的业务需求。
三、组件化的目的
沉淀业务资产,以面的方式协同复用,从而达到支持快速、低成本的组合式开发,快速应对业务的不稳定性、不确定性、复杂性、模糊性。
再者,从宏观角度来看,组件化改造是从"一体化组织"到"积木型组织"的变革之路。
四、组件化的步骤
组件化的步骤是,重新梳理业务、重新组织数据,明确业务边界,提取可复用的能力进行角色、场景枚举,然后进行统一接口设计,最后是通过平台让业务接入配置。这里说的统一接口不是只有一个接口,而是要保证语义一致性。
五、组件化的方法
1、基于流程引擎的实现
创建多个结点,然后将这个结点形成一条链。业务数据沿着这个链依次进行处理,只有当前结点执行成功后才能执行下一个结点,如果结点执行异常就进行重试,直到成功或者达到最大重试次数限制。
比如,京东的KitStore运维编排工具,通过将复杂的作业节点编排成任务,通过设定触发条件或者依赖,满足更为灵活的应用场景。
类似于自动化运维工具SaltStack,只不过KitStore将其可视化了,使得接入门槛更低。
以下为SaltStack的PlayBook示例,可以通过order指定顺序,还可以通过require、watch、onchanges、onfail灵活设置依赖和触发任务。
2、基于规则配置的实现
将业务规则的配置单独提取出来,使之与业务系统保持低耦合。
比如,京东的达人平台,支持渠道、样式、类型、字段等动态调整。前端根据规则渲染页面和拼装请求参数,服务端根据规则动态校验和保存。
3、基于设计模式的实现
增加一层抽象来隔离变化。比如模板方法。
4、基于运行时加载的实现
比如Spring Boot框架的自动装配特性,它会在应用依赖中搜索符合预期的JAR包并加载其Bean对象。
5、基于开放脚本的实现
脚本可以是代码片段、也可以是表达式,还可以是指标计算公式,其可以被动态编辑管理。
比如,京东通天塔平台提供了丰富的图文、商品、导航、营销模板,同时支持自定义代码生成自己的模板,从而让采销、运营、商家能快速和灵活地搭建营销活动页面。
六、总结
本文讲解了组件和组件化的概念,还有具体落地方案,希望能给你带来一些思考。当然,组件化的初衷是美好的,但是开发、维护、冶理的成本不容小视。
BLOG地址:www.liangsonghua.com
关注微信公众号:松花皮蛋的黑板报,获取更多精彩!
公众号介绍:分享在京东工作的技术感悟,还有JAVA技术和业内最佳实践,大部分都是务实的、能看懂的、可复现的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。