如何在 Flutter 中构建生产级应用程序

     Flutter 帮助开发人员快速构建出色的 UI。当一组开发人员开始一个新项目时,他们会一个接一个地实现一个功能。在开发的早期阶段,生产速度很可能会让客户满意。兴奋会一直持续,直到开发人员意识到他们无法再扩大项目的规模。意大利面条式代码导致开发速度很快达到稳定状态。因为会弹出各种错误,所以即使是轻微的更改也会变得太昂贵。该项目最终以失败告终。

Flutter 开发人员需要遵循一个干净的架构,以便他们可以轻松地维护他们的项目。然而,Flutter 社区没有一个被广泛接受的编写干净代码的解决方案。开发人员将过度使用复杂的模式与干净的编码混淆。当你编写代码来解决你没有的问题时,你就是在过度设计。编写过度设计的代码与意大利面条式代码一样有害,因为它会降低生产力。当你编写代码来解决你没有的问题时,你就是在过度设计。 编写过度设计的代码与意大利面条式代码一样有害,因为它会降低生产力。

寻求干净的方式

当我第一次开始使用 Dart 和 Flutter 进行开发时,我知道我应该编写干净的代码,但我不知道从哪里开始。我在互联网上看到许多声称使用干净架构编写的开发人员。然而,这些教程中的大多数都被过度设计并且从长远来看是不可维护的。

在我寻找“最佳”架构的研究过程中,我遇到了Reso Coder发布的领域驱动设计(DDD)教程。这种建筑很有意义,一见钟情。Reso Coder 将应用程序分为四个主要层。

  • 域:您的模型类、自定义故障类和接口所在的层(例如 user_model.dart)。
  • 基础设施:实现您在域层(例如 firebase_auth_service.dart)中定义的接口的层。
  • 应用:业务逻辑和状态管理在这一层处理(例如auth_cubit.dart)。
  • 演示文稿:您的应用程序的 UI。表示层是您的 Widget 所在的地方(例如 sign_in_page.dart)。

“一切都有一个位置,一切都在它的位置上,我想。所以我开始在一些小项目上练习 DDD 架构。

Sponty 应用程序是如何开始的?

去年八月,我在 Reddit 上遇到了一个很棒的人。他看到了我使用 DDD 实现的一个小项目,并问我是否愿意与他合作完成他即将开展的项目。长话短说,我们组建了一个由 3 名 Flutter 开发人员组成的远程团队。我们同意建立一个改变游戏规则的社交媒体平台,让具有相似兴趣的人能够组织和参加自发的活动。我们将它命名为Sponty. 首先,我们讨论了项目的非技术细节。我们最终开始讨论我们将使用什么架构。该项目的挑战是同时编排视频播放器、相机和地图。这需要我们小心内存泄漏,因为每个组件的内存消耗都很高。如果我们的架构很差,Sponty 的性能就会受到影响。

如何在 Flutter 中构建生产级应用程序

如何在 Flutter 中构建生产级应用程序

邦蒂

香草 DDD 的挑战

我建议使用 DDD 架构。从长远来看,它是干净和可维护的。最重要的是,我有大量使用 DDD 的经验,我对这个选择充满信心。我们所有人都同意并开始使用 DDD 架构进行开发。团队的其他成员和我一样喜欢 DDD。但是,vanilla DDD 的域层存在问题。值对象包含实体而不是使用原始类型。很快,我意识到为每个实体编写值对象令人筋疲力尽。它会让我们放慢速度,但几乎没有获得任何价值。我们修改了原始架构中的领域层,并以我们的风格实现了它。这显着提高了我们的生产力。

如何在 Flutter 中构建生产级应用程序

如何在 Flutter 中构建生产级应用程序

Resocoder 的原始领域层架构

状态管理

对于状态管理,我们需要一个重视关注点分离的解决方案;从长远来看,一种不会让我们干掉的解决方案。我们同意使用flutter_bloc,因为它是最推荐用于大型应用程序的状态管理解决方案。我们都不是 BLoC 模式的专家;我们只有基础知识。这对我们所有人来说都是一个挑战,直到我们习惯了 BLoC 模式,因为它具有更高的学习曲线。

如何在 Flutter 中构建生产级应用程序

如何在 Flutter 中构建生产级应用程序

Felix Angelov 的 Flutter Bloc 库

BLoC 的挑战

  • 即使对于简单的状态管理,它也需要过多的样板。
  • 由于yield命令异步工作,因此很难理解/遵循何时更新状态。
  • 集团与集团之间的沟通很困难。yield当您从内部范围调用它时,命令无法按预期工作。
如何在 Flutter 中构建生产级应用程序

如何在 Flutter 中构建生产级应用程序

Cubit的优势

与 Bloc 相比,选择 Cubit 有很多优势。两个主要好处是:

  • Cubit 是 Bloc 的一个子集;因此,它降低了复杂性。Cubit 消除了事件类。
  • Cubit 使用emit而不是屈服来发射状态。由于emit同步工作,您可以确保在下一行更新状态。
如何在 Flutter 中构建生产级应用程序

如何在 Flutter 中构建生产级应用程序

改用 Cubit 显着加快了我们的开发速度。起初,我们仅将其用于管理全新功能的状态。后来,我们将之前的 Blocs 转换为 Cubits。你不需要阵营,除非你需要高级特性,如油管switchMap,等你想知道多少次,我们需要阵营在我们整个项目?一次都没有。

经验教训:总是从 Cubit 开始解决您的状态管理问题。只有在您意识到 Cubit 不能解决您的问题后才切换到 Bloc。我保证它会节省大量的开发和调试时间。此外,您的业务逻辑代码将变得更易于理解和易于遵循。大多数新人都害怕 Bloc,因为它很难理解。我建议您在尝试其他状态管理解决方案之前先尝试 Cubit。你不会后悔的!

版权声明:vlifanv 发表于 2021-09-22 16:12:18。
转载请注明:如何在 Flutter 中构建生产级应用程序 | 堆栈导航

暂无评论

暂无评论...