专栏名称: 京东成都研究院
京东商城成都研究院信息平台
目录
相关文章推荐
51好读  ›  专栏  ›  京东成都研究院

组件化思维浅析

京东成都研究院  · 公众号  · 成都  · 2018-04-04 16:56

正文

组件化其实是一个很早就有的概念了,并不多稀奇,也不难理解。尤其是对于编程开发人员而言,对此应该更是熟悉。而今天这篇文章,我作为一个程序员来谈谈我对于组件化思维的一些想法,从而帮助大家了解需求是如何用组件化的思维去进行拆解,按照组件化思维去进行设计/开发,给大家解决问题提供一种通用化的思考方式


——前言

从“十节甘蔗”到“积木理论”

十年前,京东提出过一个“十节甘蔗”理论,把消费品零售的价值链分为创意、设计、研发、制造、定价、营销、交易、仓储、配送、售后等10个环节。其中,前5个环节归品牌商,后5个环节归零售商。

一节甘蔗的长短在短期内是可以发生变化的,但长期来说是固定的。如何在固定的利润水平上发掘更大的价值?最为简单直接的方法就是“吃掉更多的甘蔗节数”。

经过十多年的业务发展,京东已经积累了大量的资源和能力。为了服务于多元的场景和多变的需求,京东的组织需要变得更为灵活、敏捷,成为积木型的组织。积木型组织的含义是:打开业务环节之间的强耦合关系,使之成为一个个可拆分、可配置、可组装的插件。通过对多个可选插件的个性化组合,可以满足客户不同的偏好和需求。就像乐高积木一样,乐高有3200块左右的标准化砖块,通过统一的接口进行不同的组合叠加后,能够拼装成任何一个你能想象得到的造型——小到一辆汽车模型,大到活灵活现地重现2012年伦敦奥运会盛况。

之所以给大家分享集团的这两大战略,是因为其中的思想与我们在开发软件系统的时候有很多相似之处。早期的软件从一体化慢慢的走向服务化,再从服务化迈向云时代,正是京东最早吃掉更多的甘蔗(全部自己做,一体化单体应用)向积木理论变革的典型对比。在这一系列的转变中,实际上组件化思维在指引我们。


组件化思维

组件化就是基于可重用的目的,将一个大的软件系统按照分离关注点的形式,拆分成多个独立的组件,主要目的就是减少耦合。


互不影响是组件化的一个明显的优势,体现在产品功能迭代过程中的增删改,优化迭代的仅仅只是一个组件,对于其他组件而言,甚至不知道这个组件有了变化,事实上他们并不需要知道。

将产品的各个模块视作一个个独立的组件,组件之间没有过多的联系,保持相对独立,仅由一小部分的枢纽联系起来。


当我们将产品分拆成一个一个的组件之后,如何进行组装?这里就提到一个特殊的组件:枢纽。组件化思维中,每个产品甚至每个系统当中必然有一个核心枢纽,这个枢纽也许不是最突出、最引人注意,或者最华丽的,但却是最重要的。这个枢纽可能是我们熟悉的服务总线,也可能是我们的聚合根,甚至可能是一款应用当中的用户体系。总之,为了将一个一个独立完整的组件进行封装、组合从而产生1+1>2的“化学反应”,枢纽必不可少。


我们在组装的同时,要想办法满足外部多变的需求与场景,那么就要求我们的组件具备可配置的能力,这也是形成组件的必要条件。举个简单的例子,奶茶店里最基本的产品是奶茶,但是为了满足不同客户的口味,在基础的奶茶中添加椰果形成珍珠奶茶,添加布丁形成布丁奶茶。奶茶这种基础产品通过不同的配置项(椰果、布丁)进行组合成符合不同人群的不同产品。

在抽离配置的时候我们需要进行有效甄别,好的配置项一定能通过不同的配置值满足足够多的个性化特性。倘若抽离出来的配置项没有变化,抽离就只能增加开发成本而已。一个最简单的辨别方法是:在可以预见的场景中,某个配置项的值集数量大于2,则此配置项合理。

同时,我们要关注配置项的作用范围,有些是用来控制程序本身的行为的,例如系统的一些降级开关;还有的配置是为了满足不同的业务需求,这两种配置项需要区别对待。划分好作用域以后要根据配置项的变更频率以及影响范围来确定到底是用静态配置还是动态配置进行实现。一些关键性的配置变更是否需要引入审批机制从而杜绝配置问题导致的系统bug也是需要考量的因素。

当我们的配置足够多的时候,可以考虑引入统一配置中心来降低“抽离配置”这一通用化操作。将配置进行集中统一管理,满足复用性需求,从而降低重复开发的成本,这也符合组件化思想。


组件化产品思维

组件化思维提供一个通用化的思维方式来面对问题,其核心思想是分治,将大的问题分成很多的小问题,从而逐个击破。

组件化产品思维的本质是将组件化思维的特性适用于产品策划层面产生的一种化学反应,其目的是清晰产品结构,降低功能模块之间的干扰,建立一个健康的可持续迭代优化的良好结构。


设计组件不是把它搬到另一个地方,然后各处集中引用这么简单。开头我们就说过,组件化思维的精髓是独立、完整、自由组合。把每个组件当做一个独立产品来设计,考虑空状态、极端情况、尺寸变化、正向业务流程、逆向业务流程,尽可能灵活适应各使用场景,在组件的世界里,应当满足该问题领域所有的问题解。


产品的生命周期往往要经历6个阶段:市场调研→策划→设计→研发→测试→上线,而组件化的产品思维则是第二阶段的重点,是植根于策划阶段的概念设计,大家可以理解成产品的内在思想。

明确产品的枢纽点所在,枢纽并不是很重的功能,但却是所有功能的一个基础元素,社交对应的枢纽在于角色,电商的枢纽则在于商品。







请到「今天看啥」查看全文