从送外卖看Android Clean架构:为什么老板不需要知道外卖员开什么车?

886 阅读6分钟

想象你经营一家外卖公司,公司里有三种角色:

  1. 老板(你):制定送餐规则,关心利润
  2. 餐厅经理:准备食物,保证质量
  3. 外卖员:把食物送到客户手中

现在,如果你是老板,你需要知道每个外卖员是骑电动车、自行车还是开车吗?需要知道他们用什么导航高德还是百度吗?

不需要! 你只关心:

  • 食物准时送到(30分钟内)
  • 客户满意(不洒不漏)
  • 公司赚钱(成本控制)

这就是Clean架构的核心思想!让我们用这个外卖公司的例子,彻底理解Android开发中的关注点分离和依赖规则。

一、外卖公司的混乱:没有Clean架构

❌ 混乱的外卖公司(糟糕的代码结构)

image.png 问题分析:这个外卖员干了厨师、打包员、导航员、司机、收银员、文员的所有工作!

❌ 如果公司要扩张...

  • 想换导航软件?要重新培训所有外卖员
  • 想增加新菜品?外卖员要学新菜
  • 想换支付方式?外卖员要重新学习
  • 外卖员离职了?所有知识都带走了

二、专业的外卖公司:Clean架构实现

✅ 清晰的分工(关注点分离)

mermaid_20251215_7b952f.png

2.1 领域层:老板制定规则(不关心具体实现)

domain/model/Delivery.kt - 核心业务模型

image.png

domain/repository/DeliveryRepository.kt - 老板定义的接口

image.png

domain/usecase/AssignDeliveryUseCase.kt - 老板的业务逻辑

image.png }

老板(领域层)的特点

  • 不知道外卖员开什么车(不关心具体实现)
  • 不知道餐厅用什么灶具(不关心数据源)
  • 只关心业务规则和利润

2.2 数据层:餐厅准备食物(具体实现)

data/repository/DeliveryRepositoryImpl.kt - 餐厅经理的实现

image.png

餐厅(数据层)的特点

  • 实现老板要求的菜品标准
  • 可以使用各种厨房设备(Retrofit)
  • 负责把原材料(网络数据)加工成标准菜品(领域实体)

2.3 表示层:外卖员送餐(UI展示)

image.png

image.png

外卖员(表示层)的特点

  • 可以是电动车、自行车、汽车(不同UI实现)
  • 可以使用不同导航软件(不同地图SDK)
  • 负责把食物(数据)展示给客户(用户)
  • 与客户交互(用户输入)

三、依赖规则:为什么老板不需要知道外卖员开什么车?

3.1 依赖关系图

mermaid_20251215_682d14.png

3.2 关键规则:依赖只能指向老板(领域层)

image.png

image.png

image.png

3.3 依赖注入:公司的HR部门

image.png

老板只需要告诉HR需要什么人,HR负责招聘

image.png

4.1 如何开始重构现有项目?

第一步:识别"超级外卖员"类

image.png

第二步:提取"老板规则"(领域层) 当然我不建议usecase 抛出异常,应该包装起来。这里只是举例。

image.png

第三步:创建"餐厅厨房"(数据层

image.png

第四步:改造"外卖员"(表示层)

image.png

5.2 常见问题解答

Q:小型项目也需要这样分层吗? A:就像小外卖店开始可能只有一个人(老板兼厨师兼外卖员),但当业务增长时,一定要提前规划分工。可以从简单三层开始。

Q:UseCase会不会太多? A:就像老板的规则文档,重要的规则才需要写成UseCase。简单的CRUD操作可以直接在Repository处理。

Q:测试真的变容易了吗? A:你可以单独测试:

  • 老板的规则(UseCase测试)→ 验证业务逻辑
  • 餐厅的菜品(Repository测试)→ 验证数据处理
  • 外卖员的服务(UI测试)→ 验证用户交互

Q:学习成本高吗? A:就像培训外卖员需要时间,但一旦掌握,效率倍增。从一个小功能开始尝试。

5.3 外卖架构的终极好处

  1. 可维护性:老板换规则,不用重新培训外卖员
  2. 可测试性:可以单独测试老板的决策逻辑
  3. 可扩展性:增加新城市、新交通工具都很容易
  4. 团队协作:可以并行开发(有人设计规则,有人开发UI,有人对接API)
  5. 技术升级:换导航、换地图、换支付,都不影响核心业务

六、总结:像经营外卖公司一样写Android代码

记住这个简单的原则:

你的代码应该像一个专业的外卖公司:

  • 老板(领域层):制定规则,关心业务,不关心具体实现

  • 餐厅(数据层):准备标准菜品,可以用各种厨具

  • 外卖员(表示层):专业配送,良好服务,灵活应变

依赖规则就是:外卖员听老板的,餐厅按老板的标准做菜,但老板不需要知道外卖员开什么车,也不需要知道餐厅用什么牌子的灶具。