闲谈Andriod高级进阶之-项目架构-分包思路

随着项目规程越来越大,这个时候项目的架构设计,业务设计等就非常重要。实际项目中实现思路都不相同,但是最终目的是一样。划分模块,划分摸块的准则高内聚低耦合,以此来面对产品迭代,需求变幻


在这个多人协同工作的过程中,你不但要关注自己模块的实现,还要关注你的伙伴提交的代码质量。还要不时的,用内存分析工具,分析测试项目性能,进行优化。

首先谈下,分工协作的思路:首先要明白,不管多大的项目都需要分工,而不管怎么分工都需要协同完成。

要分工就设计到项目架构,分包是最表层的一个工作,同时反映着架构的核心思路。

先区分业务相关性。比如:我们移动端团队有一个核心APP开发迭代,但是产品组,总是有许多新的项目需求,最后就会分出多个APP使用。但是,项目经理对项目进度的要求,是按3人协作来完成的。比如需要,比如接下来2个月,需要完成其中核心APP的支付模块上线,但是也同时,有一些零碎的需求需要去完成。恩,总之一句话,就是充分利用小伙伴的战斗力,不能一人负责一个APP,不管其他的需求。

有3个独立应用。这样我们的项目中就存在大量的公共模块代码去维护。这3个应用我们只能把他们当做,3个独立模块(不能相互访问,存在自己独立入口而已)

这样必须要做的就是抽离公共模块代码组成公共库,给其他应用模块调用。

恩,这样我们Android Studio中的工程,里面就存在4个module,其中一个作为公共库,供其他应用模块调用。

这样根据业务相关性先区分,这样就相当于3个人在做一个超级APP(其实一个核心,2个小产品线)这样git合并代码的时候,就是提交对应产品线业务代码和公共库代码。

接下来聊公共库:想必大家项目中都存在这个模块,只不过在于有没有专门提取出来而已。里面包括哪些模块呢,主要是网络通信操作的相关类,数据库相关,图片处理,异常捕捉机制,工具类,自定义组件,引入的第三方开源库等。并且对各模块设置使用开关等相关配置,如果应用工程中Application使用,设置进行使用,目前这个公共库维护管理在我这边,大家有相关代码模块要加进来,一般都需要讨论下。

接下来就进入到对应产品线的应用module下,分包biz,config,ui,service,util为核心。

biz.所属业务层.模块.文件名

比如订单模块中的:

biz.bean.order.OrderGoods,

biz.model.order.OrderManager,

biz.presenter.order.OrderPresenter

biz:是专属的业务包,里面包括bean,model,presenter(基于MVP模式)。这3个包下面的分包就完全是根据具体一个app钟的小功能模块分包,不管多么复杂的APP,都可以按功能分(别问我为什么,因为产品设计,就是从抽象需求,到具体功能的实现)。比如order(订单),dish(菜品点菜),setting(设置),desk(桌台),peyment(支付),relatebase(关联父类),other等。总之根据自己功能模块划分,那么不断增加功能,那么就写就完成新功能核心模块呗,如果新功能设计到旧功能模块里面的,业务类,那么一定要继承,来实现自己的特色需求方法等,用父类中方法实现的要特别注意,后期如果你的上级类,需求变更修改,有可能影响你,所以这个就需要沟通备注好。比如菜品模块在,主要处理普通菜,属性菜,套餐菜,以及搜索点菜等不同交互下的点餐模块,但是订单提交的之际,还是需要涉及到订单管理模块里面的,订单模型,那么这个时候你直接去修改订单模块是不太好的,那么只能继承它,加入自己的相关特性。后续会受到它的影响是不可避免的。但是这一步关联与解耦是必要的。对于要跨包继承的子类一定要做好伙伴间沟通。对于这类业务继承类一般尽量沟通下,让作为主业务模块的一方,抽象出基类,放在relatebase中,如果设计这个包中的修改,就需要沟通好在做。如果是重构,或着前期就需求明确设计良好。表示这个是不停踩坑的结果。总之业务专属包里面的设计,就是为了应对我们不断新增的需求,以及迭代更改。随着项目业务不断加大,你需要慢慢的重构,设计核心类图,继承关系等。在重构中定义抽象类,接口,来使之扩展性与灵活性更好,这也是我们在高级工程师道路上的必修课,编程过程中深化设计模式,编程思想,接口设计。至于如何提升这方面能力。可以多研究一些github上优秀的开源库,看看他们为了实现灵活,高可扩展性的思路。从coding中学习。

config:是配置相关的内容,比如:http,db,system等。http里面包含服务器地址配置,接口规范设计,或自定义请求等。db自定义数据库操作类等。包含公共库里模块对应的在本应用中使用的配置,和本应用中,业务逻辑中需要的配合,环境变量等。

ui:视图层,包含:activity,dialog,fragment,popup,other,wedget。activity下面分包同样是模块,比如order(订单),dish(菜品点菜),setting(设置),desk(桌台),peyment(支付),other等。其中wedget统一放一些自定义组件等,视图控件。

util,辅助工具类相关。enlarge与other。enlarge和公共库中的有继承扩展关系,other,随意。



你可能感兴趣的:(个人原创)