稀土 2017-12-26
在终端开发中常常会因为项目的复杂度越来越高,而需要不断对业务做划分和分组,在Android中称为模块化,模块化的意义在于不断对项目做业务和代码层面的分离,从而最终做到业务的隔离和代码的复用,这种思想在其它平台也有所体现,例如WEB的前后端分离。在Android中一般来说,最终模块后架构大体如下:
其中上层可以依赖下层,业务模块之前不能相互依赖。这样做的好处在于:
当然,模块化的构建过程中会遇到一些问题,个人在实践过程中,遇到的最大的两个问题:
第一个问题属于业务问题,需要项目负责人根据公司现状去做决策。第二问题在业界其实都有比较好的解决办法,模块化实践最好的莫过于微信了,微信Android模块化架构重构实践这篇文章对于第二个问题有自己的解决办法(lib的方式)。对于部门隔离要求不那么严格项目来说,这个解决方案也不失为一种好的方式。
上面聊的都是模块化,业务组件化其实是属于模块化的一种细分,模块化是从大的业务层级来进行梳理和代码隔离的,而业务组件化注重的是UI层面的组件化,但是又比UI组件更加粗粒度,业务组件化就像是搭积木,积木就是这个组件。可以想象也一个页面由产品列表、购买按钮组成,其中,产品列表和购买按钮就是一个组件,购买按钮不仅仅是一个按钮,它包含整个购买逻辑:
本质上来看,对于终端来说,所谓的业务组件化其实就是一个绑定了特定业务的UI组件,这个UI组件可以针对很多类似场景进行数据的输入和输出,并处理特定的业务。
这样做优点是显而易见的
Android业务组件化在技术方面来讲,其实和其它项目组件化没有本质化的不同,其它组件化需要考虑到问题都需要考虑:
根据上面思路,粗略画了一个图
为了防止组件的耦合需要设计一个组件之间的通讯机制,这个通讯模块设计原理和模块化的通信类似。个人认为这种组件化设计其实是不难的,只需要在设计的时候考虑多复用和易用性即可。
那么,业务组件化最难的是什么呢?
个人认为业务组件化,到了编码阶段其实是不难的,真正难的是在于编码之前的阶段:
这两个问题,考验的是整个项目的的统一协调能力,考验的是整个项目的规划性和整个公司战略方向。
产品经理如何定义好一个业务组件?
这些问题和技术无关,和产品思路和公司整体战略有关,非产品和技术负责人不能推动。
设计师如何定义一套风格类似的组件?
考虑一个登陆授权组件,一般来说可能流程是这样的:
用户点击页面上的某个登陆按钮-》按钮跳转到一个授权登陆页面-》用户输入授权信息-》根据用户的授权信息,通过服务器去验证-》返回授权结果。
其中,设计师可能需要考虑:
产品经理考虑可能:
整个过程如果没有沟通清楚就会导致整个业务组件的定义失败。登陆授权还是简单的业务,如果遇到类似于支付宝这种复杂业务的产品,就需要在开发产品前考虑到这些问题。
从技术层面来说,越早定义好业务组件,实现就越简单,在业务还没有铺开、代码复杂度越低的时候实现就越简单。因此,业务组件化应当是一个持续的过程,特别是对于一个快速迭代的项目来说,业务组件化应当贯穿整个产品的所有开发过程。
业务组件化非常难以推行,往往不是因为技术方面的问题,大都是因为产品层面导致的。当然,一个有权威、了解产品负责人进行业务组件化跨部门推进也是非常关键的,因此,如果你想推行业务组件化,那就先从产品层面梳理项目,并选一个靠谱、有权威的负责人来推进吧!