按功能划分Package,而不是按层

原文:Package by features, not layers 

按层来划分packages就像按照专业,而不是按照团队来划分工人。

想象一下这种荒谬的场景:

管理层公司,工程师公司,人力资源公司以及市场营销公司,工程师公司只有程序员,没有管理、市场营销或者人力资源;

根据是什么东西来打包而不是根据其职能打包可以让你寻找代码的时间快十倍。

blob.png

图 1 - 按功能划分package的一个小例子

好处

  • 看到代码结构你就能辨别这个app是干嘛的(图1);

  • 更加模块化;

  • 代码切换更容易;

  • 更高级别的抽象;

  • 功能和层都分离开来了;

  • 可读性更强以及更易维护的结构

  • 更高的内聚;

  • 更易扩展;

  • 更少遇到改动无关类或者文件的情况;

  • 添加或者移除功能要容易很多;

  • 更多可复用的模块。

你同意我的说法吗?你是用的什么方法呢?