继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Flutter推荐的架构:为什么不用BLoC模式?

开心每一天1111
关注TA
已关注
手记 527
粉丝 49
获赞 218

最近,Flutter团队发布了一篇架构指南文档,并建议使用MVVM模式来组织Flutter应用的各层,遵循了其他移动框架(如原生Kotlin和Swift)中已有的模式。然而,当我们讨论应用程序架构和状态管理选项时,我们不能忽视BLoC模式的优势。为什么Flutter团队没有建议使用这种方法呢?

一个了解基础知识
理解基础知识 <!-- Corrected version as per suggestion -->
了解基础知识

BLoC 代表业务逻辑组件(Business Logic Component 的缩写)。它遵循响应式编程模式,通过流来处理状态和事件。BLoC 的主要目的是确保单向数据流,确保业务逻辑与用户界面完全分离。

BLoC的关键组件:
  1. 事件:用户操作或外部触发情况。
  2. 状态:表示当前UI的状态。
  3. Blocs:使用Stream将事件映射到状态。

BLoC 的单向数据流动,来自 https://bloclibrary.dev/architecture

另一方面,MVVM(模型-视图-视图模型)模式提供了一种更简单的方式来管理状态。这里的ViewModel作为UI和数据之间的桥梁。它通过notifyListeners()方法通知UI发生了变化。

MVVM 模式(来自文档 https://docs.flutter.dev/app-architecture/concepts

你注意到它们有什么相似之处吗? 😅 它们都能高效管理状态并实时响应更新UI,同时都能与Flutter的组件无缝集成,并且都支持异步操作,BLoC的Streams更适合处理复杂的流程。

MVVM的关键组成部分:
  1. 数据模型:代表应用的数据。
  2. ViewModel:管理状态和业务逻辑。
  3. 界面:显示UI并观察变化。

MVVM 方法的构成要素(来自 Flutter 官方文档)

由于它们主要是基于同样的关注点分离理念,即将关注点拆分到一个清晰界定的分层架构中,让我们专注于它们的不同之处。

主要区别
1. 数据流动
  • BLoC:强制执行单向数据流动。事件触发状态变化,状态变化会推送到UI。
  • MVVM:采用双向数据流动,状态更新和UI交互可以更加灵活。
2. 标准条款:
  • BLoC:需要定义更多样板代码,包括定义事件、状态和BLoC类。
  • MVVM:样板代码较少,通过notifyListeners()ValueNotifier.value直接进行更新。
3. 表现
  • BLoC:流在处理复杂异步操作时非常高效。
  • MVVM:轻量且快速,但在更大、更复杂的应用程序中可能就有些吃力了。
4. 学习过程
  • BLoC : 由于涉及到像 Streams 和 StreamControllers 这样的响应式编程概念,学习曲线更陡峭。
  • MVVM : 更容易上手,特别是新手。
5. 测试性
  • BLoC:拥有很好的可测试性,允许你独立地测试状态变化。
  • MVVM:可测试性中等,需要一些努力来分离逻辑和界面。
6. 可扩展性
  • BLoC (Business Logic Component) :适用于大型且状态共享的应用。
  • MVVM :更适合小型或中型应用,因为在大型应用中可能产生过度耦合。
结尾

不论是使用 BLoC 还是结合了 ChangeNotifierValueNotifier 的 MVVM,都能使你的 Flutter 代码更清晰、更易维护。正确选择取决于你的项目规模、复杂性以及你偏好的结构化,这样更符合中文的习惯。

装置何时选择BLoC:

选择 BLoC,如果你正在构建一个大型、复杂的应用程序,并希望在严格的架构规则下感到安心。BLoC 的事件到状态模式和不可变性让测试、调试和跟踪数据流变得更加容易。如果你的团队重视可预测性,并且喜欢一种明确定义且易于扩展的方法,BLoC 是一个不错的选择,值得考虑。

不同时选择带有通知机制的MVVM模式吗?

如果你在寻找一种快速实现且易于理解的模式,那么MVVM模式可能正合你意。它非常适合小型或中型的项目,或者当你刚开始学习,不需要处理BLoC的全部复杂性时。你会花更少的时间来设置,而有更多时间来进行快速迭代,不过你需要自律,以避免随着时间推移而造成混乱。

通过理解每种模式的特点,你可以选择最适合你团队和应用需求的模式。无论你选择哪一种,你都向更干净、更高效的 Flutter 代码迈进了一大步。

你更倾向于为你的 Flutter 项目使用哪种方法或技术?在下面的评论里告诉我吧,!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP