问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Flutter大型项目架构:分层设计篇

创作时间:
作者:
@小白创作中心

Flutter大型项目架构:分层设计篇

引用
简书
1.
https://www.jianshu.com/p/e8b27b7ff782

Flutter大型项目架构设计是确保代码可维护性、可扩展性和可重用性的关键。本文将深入探讨Flutter应用的分层设计原则,以及如何使用Melos工具进行组件包管理,帮助开发者构建更加健壮和灵活的Flutter应用。

为何需要分层设计

在大型项目开发中,代码结构的混乱是一个常见的问题。随着业务功能的不断增加,代码量也会随之膨胀,最终可能导致代码库变得难以维护。例如,一个小小的bug可能需要花费大量时间来定位,而且修复一个bug可能会引入更多的问题。

为了解决这些问题,团队可能会尝试通过添加注释、规范命名等方式来改善代码质量。然而,这些措施往往只能治标不治本。真正的解决方案在于采用分层设计,将应用程序划分为不同的层级,每个层级负责特定的功能或责任。

分层设计的主要好处包括:

  • 代码层级责任清晰:每个层级都有明确的职责边界。
  • 维护方便:修改和维护代码时影响范围更小。
  • 扩展方便:新增功能时可以更容易地找到合适的层级进行扩展。
  • 重用方便:不同项目之间可以复用某些层级的代码。
  • 独立开发与测试:每个模块可以独立开发和测试,提高开发效率。

原生App开发的分层设计

在iOS和Android开发中,常见的分层设计模式包括MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)。这些模式主要关注应用层的组织方式,但对于大规模应用来说,仅靠应用层的分层设计是不够的。

当应用规模扩大时,通常需要采用更复杂的分层设计,包括模块化、Hybrid机制、数据库管理等。在iOS开发中,常见的做法是将工程拆分为多个Pod私有库组件,每个组件可以独立开发和测试。

Flutter的分层设计

Flutter的分层设计与原生应用类似,但具体实现方式有所不同。为了提高代码的可扩展性和可维护性,需要将代码分成独立的层,并依赖于抽象而不是具体的实现。

在Flutter项目中,可以使用Melos工具来管理组件包,实现分层设计。Melos类似于iOS的Pod,专门用于Flutter项目的包管理。

组件包管理工具Melos

Melos的使用步骤如下:

  1. 安装Melos:

    dart pub global activate melos
    
  2. 创建workspace目录,并添加melos.yaml和pubspec.yaml配置文件:

    flutter_architecture_design
    ├── melos.yaml
    ├── pubspec.yaml
    └── README.md
    
  3. 新建组件包,注意组件包需要放在workspace目录中。

  4. 编辑melos.yaml配置文件,定义组件包和相关命令:

    name: flutter_architecture_design
    packages:
    
  • widgets/**
  • shared/**
  • data/**
  • initializer/**
  • domain/**
  • resources/**
  • app/**
    command:
    bootstrap:
    usePubspecOverrides: true
    scripts:
    analyze:
    run: dart pub global run melos exec --flutter "flutter analyze --no-pub --suppress-analytics"
    description: Run analyze.
    pub_get:
    run: dart pub global run melos exec --flutter "flutter pub get"
    description: pub get
    build_all:
    run: dart pub global run melos exec --depends-on="build_runner" "flutter packages pub run build_runner build --delete-conflicting-outputs"
    description: build_runner build all modules.

    其他构建命令省略

    
    
  1. 执行bootstrap命令:

    melos bootstrap
    
  2. 配置Android Studio的Shell Scripts,方便在IDE中执行相关命令。

Flutter分层设计实践

在实际项目中,可以将应用分为以下几个主要组件包:

  • app:项目的主工程,存放业务逻辑代码、UI页面和Bloc,还包括styles、colors等资源。
  • domain:实体类组件包,包含接口类如repository、usercase等。
  • data:数据提供组件包,包括api_request、database、shared_preference等。该组件包的所有调用实现都在domain中的repository_impl中。
  • shared:工具类组件包,包含util、helper、enum、constants、exception、mixins等。
  • resources:资源类组件包,包含intl、公共的images等。
  • initializer:模块初始化组件包,负责收集其他模块的初始化工作。
  • widgets:公共的UI组件包,如alert、button、toast、slider等。

这些组件包之间的调用关系如下:

其中,shared和resources作为基础组件包,不依赖任何其他组件,只提供支持功能。主工程app不会直接依赖data组件包,而是通过domain组件包中的UseCase来实现数据调用。

在data组件包中,repository的实现类负责具体的数据获取工作,而上层调用则通过UseCase来处理数据获取、分页、参数校验等业务逻辑。

initializer组件包主要用于模块初始化,将各个组件包的初始化工作集中在一个AppInitializer类中,便于在主工程的main函数中统一调用。

widgets组件包则专注于UI组件的实现,不涉及业务逻辑,适合在多个项目中复用。

虽然这种分层设计在开发过程中可能会显得有些繁琐,但在大型项目和团队协作中,它能够带来更好的代码组织和维护体验,确保每个组件包都有明确的职责边界,支持独立开发和测试。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号