android 模块化开发

组件:侧重于业务,可编译成单独的app,一般只负责单一业务,具备自身的生命周期(通常包含Android四大组件的一个或多个,所以称之为组件也更加贴切)

 

模块: 侧重于功能,与业务无关,比如自定义控件、网络请求库、图片加载库等而从Android Studio推出之后,我们在开发项目时也会有意识的将一些可重用的代码逻辑抽离成一个个的Module,这也就是模块化开发的雏形。目的将一个程序按照功能拆分成相互独立的若干模块,它强调将程序的功能分离成独立的、可替换的模块。每个模块内只有与其相关功能的内容。

 

不管是模块化还是组件化,都不是一个新的设计思想,它们最早都是在20世纪60年代就已经被提出了,但是早期的移动应用由于相对简单,本身逻辑功能也不多,所以在移动端的应用反而没那么广泛。 没有一个明确的界线去区分它们。网上很多文章对于组件和模块的定义也是不尽相同的,一些人认为组件的粒度更细,它只是具备单一功能与业务无关的组件,比如一个日历选择控件就认为是一个组件。而模块他们认为就是业务模块,顾名思义,就是按业务划分而成的模块。而另一部分人则相反。 在维基百科对模块化的解释中有这么一句: A component is a similar concept, but typically refers to a higher level; a component is a piece of a whole system, while a module is a piece of an individual program 也就是认为组件粒度较模块要更大, 从上面的概述来看其实组件化跟模块化没有明显的区别;一个登录功能可以是一个模块也可以是一个组件,一个日期选择控件可以是一个模块,也可以是一个组件,因为不管是模块化还是组件化,它们都有一个共同的目标:将一个大的软件系统细化成一个个模块或者组件,都是为了重用和解耦。

 

优点:一个复杂的系统可以由一个个组件集合而成,甚至于不同的组合可以构建出不同的系统。每个组件有独立的版本,可独立编译、打包,大大提高了系统的灵活性以及开发人员的开发效率。应用的更新可以精细到组件,组件的升级替换不会影响到其它组件,也不会受其它组件的限制。基于组件化架构设计的应用比传统的“单片”设计可重用性高得多,因为这些组件可以在其他项目中重用,而且开发人员无需了解整个应用,可以只专注于分配给他们的较小的任务,提高开发效率。 缺点:组件化的实施对开发人员和团队管理人员提出了更高水平的要求,项目管理难度更大。组件间如何进行通信也是需要慎重考虑的。万事开头难,在对一个项目进行组件化分解时就好像庖丁解牛一般,你需要了解项目的“肌理筋骨”,才知道从何处下“刀”,才能更轻易的去分解项目,这就要求对于项目的整体需求了如指掌。

 

注意事项

1.模块化项目中的onClick、onItemClick等各种回调方法中的不能使用switch (view.getId()) case语句会报错.需要替换成 if (id == R.id.bt_login_success) else 来替代。而library中生成的view的R.java中的资源ID不是常量,导致不能使用,而在APP中生成的ID则是有final修饰的常量。

2.模块化中能不能用ButterKnife框架或者已经使用了ButterKnife的项目模块化重构的时候还能不能使用? 答案也是肯定的,但是不是十分推荐,使用原生的兼容性更好。 要想继续使用ButterKnife,首先需要在根目录build文件中导入: classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'       然后在想使用ButterKnife模块的build文件中引入plugin和导入库: apply plugin: 'com.jakewharton.butterknife' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' 这样在注解@BindView的时候,只需要把R.id.rg_tab换成R2.id.rg_tab,library中R中id不是常量,所以会找不到这个id,而butterknife的插件会自动帮我们生成R2文件,里面的id是常量类型,所以只需要把R替换成R2即可。     @BindView(R2.id.rg_tab)     RadioGroup rgTab;

3.文件名不能重复,建议资源名命名规则: 所有资源文件的命名都需要以业务模块名为前缀,注意不要与其他业务模块前缀名冲突。假设我们在开发"登录"相关的业务,业务模块名为"login",则相关资源文件命名例子: layout文件:login_activity_quicklogin.xml、login_activity_register.xml anim文件:login_slide_in.xml mipmap文件:login_btn_submit.png string:<string name="login_submit">提交</string>

 

 

后续。。。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值