从 Android 组件化到 Flutter 组件化

一套统一的工程架构理解(MVVM + core + modules + domain)

很多架构概念之所以让人混乱,并不是它们本身复杂,而是同时被从不同维度讲

当你把维度拆清楚,Android 和 Flutter 在工程结构上,其实是同一套思想

本文从一个 Android 工程师的视角,系统总结 MVVM、组件化、core、domain 在 Flutter 项目中的正确落位方式。

一、先说结论(重要)

Flutter 组件化 ≈ Android 组件化

只是:

  • Android 用 Gradle module

  • Flutter 用 package(本地 path 依赖)

除此之外,工程思想是完全一致的

二、我们到底在解决什么问题?

不管 Android 还是 Flutter,一个中大型项目都会遇到同样的问题:

  • 代码越来越多,边界模糊
  • UI、业务规则、通信逻辑搅在一起
  • 改一个业务规则,要动很多地方
  • 技术(MQTT/TCP/网络)和业务强耦合
  • 多人协作、长期维护成本高

这些问题,不是靠某个名词解决的 ,而是靠工程结构

三、三个"正交维度",把所有概念一次理清

很多混乱,来自把不同维度的概念混在一起。

实际上我们讨论的所有东西,来自 3 个完全独立的维度

维度 1:UI 架构 ------ MVVM(只管 UI)

MVVM 只解决一件事:UI 怎么组织

在 Flutter 中:

MVVM 概念 Flutter 对应
View Widget
ViewModel Riverpod Notifier / Bloc / Cubit / ChangeNotifier
Model(UI State) UiState / State 类

👉 MVVM 只存在于 UI 层

维度 2:工程组织 ------ 组件化(modules)

组件化 = 多模块依赖

  • Android:Gradle module

  • Flutter:package(path 依赖)

目标只有一个:

让工程按"业务 / 能力"拆分,而不是堆在一个工程里

维度 3:业务抽象 ------ domain(可选但强烈推荐)

Domain 的本质一句话:

把业务规则和业务流程抽出来,

让 UI 只"调用",不"判断"。

它带来的直接收益是:

  • 规则只写一次
  • 修改只在一个地方
  • UI 更薄
  • 技术实现可替换

四、core 和 modules 的正确定位

1️⃣ core 是什么?

core = 通用基础类库 / 能力库

特点:

  • 不包含任何业务名词
  • 可被多个业务模块复用
  • 永远不反向依赖业务模块

典型内容:

  • Result / Error / Logger / Utils
  • 通用网络封装
  • MQTT / TCP 通用连接能力
  • 通用 UI 组件(可选)

2️⃣ modules 是什么?

modules = 业务模块集合

每一个 module 对应一个业务域,例如:

  • robot
  • auth
  • device

业务模块里,才会出现:

  • 页面
  • ViewModel
  • 业务规则
  • 协议 / topic / CRC 等

五、domain 应该放在哪里?

结论非常明确:

domain 放在各自的业务 module 下面

而不是 core。

原因:

  • domain 通常是业务专属规则
  • 放 core 会污染"基础库"的纯度
  • 修改业务规则不应该影响其他模块

典型结构(单业务模块)

复制代码
modules/robot/
  ui/        # Flutter MVVM
  domain/    # 业务规则 / UseCase / Repository 接口
  data/      # MQTT / TCP / 协议 / Repo 实现

六、Flutter 组件化的"最终标准结构"

一个主 App + 多个 package(与 Android 完全同构)

复制代码
root/
  app/                      # ✅ 主 App(能 flutter run)
    lib/main.dart
    android/
    ios/
    pubspec.yaml

  core/                     # 通用基础库
    core_base/
    core_comm_mqtt/
    core_comm_tcp/

  modules/                  # 业务模块
    robot/
      robot_ui/
      robot_domain/
      robot_data/

主 App 和 core / modules 同级

就像 Android 的 app 和其他 module 同级。

七、Flutter 里"谁是主 App"?

一眼判断标准:

  • ✅ 有 lib/main.dart

  • ✅ 有 android/ios/

  • ✅ 能直接 flutter run

其他只有 lib/ + pubspec.yaml 的,都是 组件 package

八、Flutter 的依赖方式(≈ Gradle)

Android(你熟的)

implementation(project(":robot"))

Flutter(等价)

复制代码
dependencies:
  robot_ui:
    path: ../modules/robot_ui

👉 思想完全一致

九、domain 带来的"工程级价值"(解耦,统一入口)

你之前说的一句话非常关键:

domain 后期更好复用和维护,修改都在唯一地方,其他就是调用

工程化翻译就是:

  • Single Source of Truth
  • 统一业务入口(UseCase)
  • UI 不再散落业务判断
  • 技术切换(MQTT ↔ TCP)不影响业务

这是 domain 存在的真正理由,而不是"架构好看"。

十、最终统一总结(一句话版)

  • MVVM:只管 UI

  • 组件化:工程拆模块

  • core:通用基础能力

  • modules:业务模块

  • domain:业务规则抽象(让 UI 只调用)

当你把这五点分清楚,
Android 和 Flutter 的工程架构,本质上是一套东西。

相关推荐
学编程的小程2 分钟前
一库统管全域数据:金仓 KingbaseES 多模融合架构与全栈替代实践
架构
一起养小猫4 分钟前
Flutter for OpenHarmony 实战:食物生成算法与难度递增系统
算法·flutter
爱不离此4 分钟前
安卓和Flutter混合开发打断点
android·flutter
晚霞的不甘11 分钟前
Flutter for OpenHarmony《淘淘购物》主页点击跳转功能详解:从 UI 响应到页面导航的完整实现
前端·flutter·ui·搜索引擎·前端框架·交互
灰灰勇闯IT12 分钟前
Flutter for OpenHarmony:安全高效地使用网络请求三方库
网络·安全·flutter
cooldream200912 分钟前
前端技术架构详解:Vue 3 + TypeScript + Vite 在具身 AI 系统中的实践
前端·架构·typescript
叶羽西13 分钟前
Android15借助Linux proc虚拟文件系统调试用户态实现
android·linux kernel
[H*]16 分钟前
Flutter框架跨平台鸿蒙开发——Hero嵌套导航详解
flutter
九 龙18 分钟前
Flutter框架跨平台鸿蒙开发——习惯养成APP的开发流程
flutter·华为·harmonyos·鸿蒙
[H*]26 分钟前
Flutter框架跨平台鸿蒙开发——Hero物理模拟动画详解
flutter