Flutter 应用程序如何组织可扩展的文件夹结构

开发人员在使用 Flutter 时经常面临的挑战之一是如何以可扩展和可维护的方式组织项目。

文件夹结构在这方面起着关键作用。

让我们深入了解如何构建 Flutter 应用程序以实现可扩展性。

文件夹结构的重要性

为 Flutter 应用程序选择正确的文件夹结构是非常重要的。它直接影响团队合作时的可维护性、可扩展性和协作便利性。

鉴于 Flutter 并不强制要求严格的文件夹结构,开发人员可以自由选择最适合他们需求的文件夹结构。

但是,这种自由也可能导致混乱,尤其是对于大型项目。

Flutter 文件夹结构的常见模式

Flutter 社区中有两种流行的模式:

按类型/域划分的文件夹:

这是最常见的模式。这种模式中,文件根据其功能或类型进行组织。

例如,所有屏幕都将放置在名为“screens”的文件夹中,数据模型放置在“models”中,依此类推。这种结构直观且适合初学者。

但是,对于具有大量文件的大型项目来说,它可能会变得很麻烦。

lib/
├── screens/
├── widgets/
├── services/
├── view_models/
├── services/
└── ...

按功能划分的文件夹:

此模式非常适合大型项目,可根据功能组织文件。

每个功能都有自己的文件夹,其中包含与该功能相关的 screens、widgets、controllers 和 services。

这种方法确保了更好的组织和更容易的导航。

lib/
├── feature_1/
│   ├── screens/
│   ├── widgets/
│   ├── models/
│   ├── services/
│   └── view_models/
├── feature_2/
│   ├── screens/
│   ├── widgets/
│   ├── models/
│   ├── services/
│   └── view_models/
└── ...

深入了解“按功能划分的文件夹”模式

对于希望采用“按功能划分的文件夹”模式的人来说,有一个 CLI 工具可以帮助设置结构。该工具将生成如下结构:

feature1/
├── domain/
│   ├── models/
│   │   └── feature1_model.dart
│   ├── repository/
│   │   └── feature1_repository.dart
│   ├── services/
│   │   └── feature1_service.dart
│   └── feature1_domain.dart
├── providers/
│   ├── feature1_provider.dart
│   └── providers.dart
├── screens/
│   ├── feature1_screen.dart
│   └── screens.dart
├── widgets/
│   ├── feature1_widget.dart
│   └── widgets.dart
└── index.dart

工具地址

额外提示:代码组织和模块化

另一种有效的代码组织方法是将常见的代码片段提取到软件包中。这可以通过多种方式实现:

  • 将包发布到 pub.dev

  • 上传到远程 git 存储库

  • 将它们作为单独的文件夹放在同一个代码库中

lib/
└── packages/
    ├── pkg_1/
    │   ├── lib/
    │   └── pubspec.yaml

每个软件包都有自己的 pubspec.yaml 文件,其中包含该软件包的特定依赖项。

结论

文件夹结构的选择在很大程度上取决于 Flutter 项目的规模和复杂性。对于大型项目来说,拥有一个固定的的模式是有益的,因为它可以确保一致性,即使会引入一些模板代码。

关键是找到适合项目需求并增强开发体验的平衡点。

引用链接

[1] 工具地址: https://pub.dev/packages/feature_folder_cli