本文主要根据The Model-View-ViewModel Pattern – Xamarin | Microsoft Learn[1]文章的内容对MVVM进行介绍,MVVM是MVC的演化版本,相关内容可以查看MVC理解、MVP介绍。
Model-View-ViewModel
Model-View-ViewModel (MVVM)模式用于将应用程序的业务和呈现逻辑从UI界面中清晰地分离出来。保持应用程序逻辑和UI的分离有助于解决开发问题,并使应用程序更易于测试、维护、及迭代。同时,MVVM还可以极大地提高代码复用机会,并允许开发人员和UI设计人员可以更好地协作。
MVVM模式
MVVM模式中有三个核心组件:模型model,视图view,以及视图模型view model。每个组件都用于不同目的,三者间的关系如下。
view知道view model的存在,view model知道model的存在,但model不知道view model,view model也不知道view。因此,view model将view和mode隔离开来,并允许model独立于view改变。
MVVM模式的优点参考如下:
-
view model可以作为现有model的适配器,避免移植时对model代码进行重大修改 -
可以在不使用view的情况下为view model和model创建单元测试 -
可以重新设计UI而不需要修改代码 -
设计人员和开发人员在开发过程中可以同时独立工作,设计人员专注于view,开发人员处理view model和model组件
视图 View
view负责定义用户在屏幕上看到的结构、布局、和外观。
.Net中,view在XAML中定义,并具有有限的代码隐藏code-behind。
view model负责定义影响view显示的逻辑状态更改,如命令是否可执行,或操作挂起指示。因此,启用和禁用UI元素应该通过绑定view model属性来实现,而不是在代码隐藏中实现。
视图模型 ViewModel
view model实现view可以进行数据绑定的属性property和命令command,并通过更改通知事件通知view所有的状态改变。view model提供的属性和命令定义了UI提供的功能,但view决定了这些功能如何显示。
view model还负责协调view与所需model类的交互。view model和model之间通常存在一对多的关系。
.Net中,view model可以通过使用数据绑定data-binding连接到view。
需要注意保持view model和view独立。view与数据源中的属性的绑定应该是view对其对应view model的主要依赖。特别是应避免在view model中引用view的类型(如Button类等)。通过遵循上述原则,可以独立测试view model,从而通过限制范围来减少软件异常的可能性。
模型 Model
model类是封装了应用程序数据的非可视类。因此model可以被认为是应用程序的领域模型domain model,它通常包含具有业务逻辑和验证逻辑的数据模型。
总结
MVVM模式通过将应用程序的UI、底层表示、业务逻辑划分为三种独立的类来实现增加代码灵活性和复用性的目的:视图,封装UI和UI逻辑;视图模型,封装呈现逻辑和状态;模型,封装应用程序的业务逻辑和数据。
参考资料
The Model-View-ViewModel Pattern – Xamarin | Microsoft Learn: https://learn.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm
原文始发于微信公众号(技术知识小记):MVVM介绍
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/184913.html