0%

关于组件化

#关于组件化

定义

  1. 模块化:指业务功能代码的职责单一,解耦合,易维护,扩展。
  2. 组件化:将原项目中子业务代码,拆分为可复用,可独立立项的项目。

我的流程

  1. 先做好基础的代码模块化
    https://five.agency/android-architecture-part-2-clean-architecture/ 参考这片文章的思想、模块划分,写出好模块化代码
  2. 再做好组件化
    根据实际的业务需求,将其中的代码提取出来,“组件化”为可以编译,复用的子项目。

很多网上“组件化”文章犯了两个错误

  1. 没有理解第一条,全篇都只是在处理第二条
  2. 第二条工作中过度设计,将所有的业务都“组件化”为单独的子项目。而为了实现这一目标,给项目增加了很多额外的技术债务和复杂度

例如:https://juejin.im/entry/5bc7f791f265da0a8d36c1fb

  1. 组件化的核心是代码的模块化,代码模块化的核心是遵循程序设计的七大原则,写出好的代码。而本文对此基本没有描述,全篇只是讲代码文件放在哪里好,怎么实现所有子业务可独立编译的框架。
  2. 该方案中共用代码,初始化,gradle编译关系的处理。都是为了实现所谓的“组件化”而增加的技术债务,相比原生的程序开发流程,并没有简化代码,提高性能,增加可读性。反而更加复杂化
  3. 知乎有业务需要独立编译运行的需求吗?如果没有,那将所有业务都设计成能直接编译运行就属于过度设计。

最后

有些人吵着闹着要让程序“模块化”,结果他们的做法是把代码分部到多个文件和目录里面,然后把这些目录或者文件叫做“module”。他们甚至把这些目录分放在不同的VCS repo里面。结果这样的作法并没有带来合作的流畅,而是带来了许多的麻烦。这是因为他们其实并不理解什么叫做“模块”,肤浅的把代码切割开来,分放在不同的位置,其实非但不能达到模块化的目的,而且制造了不必要的麻烦。

真正的模块化,并不是文本意义上的,而是逻辑意义上的。一个模块应该像一个电路芯片,它有定义良好的输入和输出。实际上一种很好的模块化方法早已经存在,它的名字叫做“函数”。每一个函数都有明确的输入(参数)和输出(返回值),同一个文件里可以包含多个函数,所以你其实根本不需要把代码分开在多个文件或者目录里面,同样可以完成代码的模块化。我可以把代码全都写在同一个文件里,却仍然是非常模块化的代码。

from:http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy