我正在使用Ffltter创建一个新的应用程序,并且我正在try 设计它,将业务逻辑与视图分开.
我读过Bloc和MVVM(我知道还有其他模式,但这些是我喜欢的),但我不理解它们之间的区别.它们在我看来几乎一样.
有人能帮我理解一下吗?
我正在使用Ffltter创建一个新的应用程序,并且我正在try 设计它,将业务逻辑与视图分开.
我读过Bloc和MVVM(我知道还有其他模式,但这些是我喜欢的),但我不理解它们之间的区别.它们在我看来几乎一样.
有人能帮我理解一下吗?
实际上,它们并不完全相同...MVVM意味着视图和viewmodel之间的数据绑定,这意味着在实践中,视图对象主要是控制viewmodel的对象.在我看来,MVVM似乎是MVC的简化,在幕后显示模型"原样".例如,Xamarin主要使用MVVM和屏幕上的控件,如复选框、文本输入等,都会在幕后修改modelview.
你可能已经开始看到一个问题:如果你改变了用户界面,你可能还需要改变MV.假设你的条目号必须在0-255之间,你把这个逻辑放在哪里?在MVVM上,你把这个逻辑放在视图上.但是,为了保证数据安全,还必须在modelview上设置这些锁.这意味着大量的代码重写来完成同样的事情.如果你决定改变这个范围,你必须在两个地方改变,这使得你的代码更容易出错.Disclaimer:这方面有解决办法,但比实际情况复杂得多.
另一方面,BLoC通过接收事件和emits 状态来工作.它不在乎(尽管可能)事件来自何方.使用上面的同一个例子,视图会向bloc/controller发送一个事件信号,并显示"嘿,我的号码变了!",然后,该集团将处理这个新事件,如果合适的话,向用户界面发出一个信号:"嘿,用户界面!你应该改变!我为你准备了一个新状态!".然后,UI会self 重建,以呈现这些更改.
对我来说,与MVVM相比,BLOC的优势在于业务逻辑可以与视图entirely解耦,这总体上是一种更好的处理方式.由于我们的现代软件开发需要越来越多的UI更改(不同的屏幕大小、密度、平台等),将UI端与模型解耦是代码可重用性的一个奇妙特性.