本文内容依据 Android 开发者大会内容收拾而得,详见:By Layer or Feature? Why Not Both?! Guide to Android App Modularization

问题

  1. 跟着项目的逐步增多,项目中的类文件怎么存放、组织逐步变成一个问题;
  2. 在模块化的过程中,怎么拆分代码或许拆分代码库房需要一个指导原则;

模块化时,如何进行模块拆分?

衡量模块化好坏的规范

衡量模块化好坏主要有三个层面:耦合程度、内聚程度以及模块的颗粒度。耦合是衡量模块相互依靠的程度,内聚衡量单个模块的元素在功用上的相关性,颗粒度是指代码模块化的程度。好的模块应做到以下几点:

  1. 低耦合:模块不应该了解其他模块的内部作业原理。 这意味着模块应该尽可能地相互独立,以便对一个模块的更改对其他模块的影响为零或最小。
  1. 高内聚:意味着模块应该仅包括相关性的代码。在一个示例电子书应用程序,将书本和支付的代码混合在同一个模块中可能是不合适的,因为它们是两个不同的功用范畴。
  1. 适中颗粒度:代码量与模块数量有恰当的比例,模块太多会产生必定的开支,模块太少达不到复用的效果。

依照层级(Layer)区分

层级是指 Android 官方架构攻略中的三层架构,分别为 UI Layer、Domain Layer 和 Data Layer :

模块化时,如何进行模块拆分?

在小型项目中依照 Layer 进行分层是可以满足需求的,跟着项目的增大,需要将更多功用拆分到更多的模块中,否则就会出现高耦合和低内聚的情况。

依照特性(Feature)区分

若是依照特性区分,每个模块中会包括类似/相同逻辑(如 Reviews),然后导致代码冗余。

模块化时,如何进行模块拆分?

模块间的依靠逻辑耦合严重,不利于独立开发。

模块化时,如何进行模块拆分?

一起使用分层和特性区分

可以一起结合分层与特性区分的优势,扬长避短。首要依照特性拆分,在拆分后的这个小的逻辑单元中再依照层级来分,这也是壳工程的一个基本思路。

模块化时,如何进行模块拆分?

扩展阅览

  1. Android 分层架构攻略

    1. Android 分层架构攻略(一) – 概述
    2. Android 分层架构攻略(二) – UI Layer
    3. Android 分层架构攻略(三) – Domain Layer
    4. Android 分层架构攻略(四) – Data Layer
    5. Android 分层架构攻略(五)- 总结
  2. Android 模块化介绍

    1. Android 官方模块化计划解读
    2. 模块化中怎么进行拆分组织代码?
  3. Now in Android 项目实战案例

    1. 我从 Android 官方 App 中学到了什么?
    2. Android 官方项目是怎么做模块化的?快来学习下