如果我们使用短语“MVC, MVP和MVVM设计模式之间的差异”搜索谷歌,那么我们可能会得到一些讨论MVC MVP和MVVM设计模式理论上的差异的URL,例如:
MVP
在无法通过“dataContext”进行绑定的情况下使用。
Windows窗体就是一个很好的例子。为了将视图与模型分开,需要一个表示器。由于视图不能直接绑定到演示者,信息必须通过接口(IView)传递到视图。
MVVM
在可能通过“dataContext”进行绑定的情况下使用。为什么?每个视图的各种IView接口被删除,这意味着需要维护的代码更少。
一些例子中,MVVM是可能包括WPF和javascript项目使用Knockout。
MVC
在视图和程序其余部分之间的连接并不总是可用的情况下使用(并且您不能有效地使用MVVM或MVP)。
这清楚地描述了web API与发送到客户端浏览器的数据分离的情况。微软的ASP。NET MVC是管理这种情况的一个很好的工具,并提供了一个非常清晰的MVC框架
但我还没有找到一篇文章从理论上讨论了这种差异,并附带了示例代码。
如果我能得到一篇文章,讨论这3种设计模式(MVC, MVP和MVVM)之间的区别以及代码,那就太好了。
我想要得到3个类似的CRUD应用程序的源代码,它们已经由这三种设计模式(MVC, MVP和MVVM)实现。这样我就可以通读代码,了解如何为这三种设计模式(MVC, MVP和MVVM)编写代码。
因此,如果有任何这样的文章讨论了这3种设计模式(MVC, MVP和MVVM)的代码如何不同,那么请将我转到那篇文章。
MVC vs MVP vs MVVM
模型视图控制器
View(.xml, .storyboard) - Controller(Activity, Controller) - Model(Others)
视图-渲染UI
控制器与视图绑定
MVP -模型视图演示器
View(.xml, .storyboard, Activity, Controller) - Presenter(plain Class) - Model(Others)
百达
View(.xml with data, view.swift) - ModelView(ViewModel, ObservableObject) - Model(Others)
Android DataBinding, SwiftUI
MVVM采用数据绑定或双向数据绑定的方式,在观察的基础上连接View和ModelView
有时在UI世界(iOS, Android),你可以找到额外的对象(路由器,导航器,协调器),负责导航和设置依赖项
MVP:
优点:
演示者将出现在模型和视图之间。Presenter将从Model中获取数据,并根据视图的需要对数据进行操作,并将其交给视图,视图只负责渲染。
缺点:
1)我们不能对多个模块使用presenter,因为数据在presenter中被一个视图类修改。
3)打破Clean架构,因为数据流应该只向外,但这里数据是从演示者返回到视图。
MVC:
优势:
这里我们在视图和模型之间有控制器。这里的数据请求将从控制器到视图完成,但数据将以接口的形式发送回视图,而不是与控制器。控制器不会因为很多事务而膨胀。
不服光彩:
数据操作应该由视图来完成,这将是UI线程上的额外工作,如果数据处理更多,可能会影响UI渲染。
MVVM:
在宣布架构组件之后,我们访问了ViewModel,这为我们提供了最大的优势,即它的生命周期感知。如果视图不可用,它不会通知数据。这是一个干净的架构,因为流只处于正向模式,数据将由LiveData自动通知。所以,这是Android推荐的架构。
即使是MVVM也有缺点。由于它是一个生命周期感知,一些概念,如警报或提醒应该在应用程序之外。因此,在这种情况下,我们不能使用MVVM。