第十八章:MVVM(一)

简介:

你还记得你最早的编程经历吗?您的主要目标可能是让程序正常运行,然后让它正常工作。您可能对程序的组织或结构没有太多考虑。那是后来发生的事情。
计算机行业整体经历了类似的演变。作为开发人员,我们现在都意识到,一旦应用程序开始增长,通常在代码上强加某种结构或体系结构是个好主意。使用此过程的经验表明,在编写任何代码之前,通常最好开始考虑这种体系结构。在大多数情况下,理想的程序结构致力于“关注点分离”,通过该关注点,程序的不同部分关注于不同类型的任务。
在图形交互式程序中,一种显而易见的技术是将用户界面与底层的非用户界面逻辑(有时称为业务逻辑)分开。对图形用户界面这种体系结构的第一次正式描述称为模型 - 视图 - 控制器(MVC),但是这种体系结构从此产生了从中衍生出来的其他体系结构。
在某种程度上,编程接口本身的性质会影响应用程序架构。例如,包含带有数据绑定的标记语言的编程接口可能会建议构建应用程序的特定方法。
确实有一个专门针对XAML设计的架构模型。这称为Model-View-ViewModel或MVVM。本章介绍了MVVM的基础知识(包括命令接口),但您将在下一章中看到有关MVVM的更多信息,其中包括集合视图。此外,Xamarin.Forms的一些其他功能通常与MVVM结合使用;这些功能包括触发器和行为,它们是第23章的主题。

MVVM相互关系

MVVM将应用程序分为三层:

  • 模型提供基础数据,有时涉及文件或Web访问。
  • ViewModel连接Model和View。 它有助于管理模型中的数据,使其更适合View,反之亦然。
  • View是用户界面或表示层,通常在XAML中实现。

该模型不了解ViewModel。 换句话说,模型对ViewModel的公共属性和方法一无所知,当然也不了解其内部工作原理。 同样,ViewModel也不了解View。 如果三层之间的所有通信都是通过方法调用和属性访问进行的,那么只允许在一个方向上进行调用。 View仅调用ViewModel或访问ViewModel的属性,ViewModel同样只调用Model或访问Model属性:
201810082126440412
这些方法调用允许View从ViewModel获取信息,而ViewModel又从Model获取信息。
然而,在现代环境中,数据通常是动态的。 通常,模型将获得必须传递给ViewModel并最终传递给View的更多或更新的数据。 因此,View可以将处理程序附加到ViewModel中实现的事件,ViewModel可以将处理程序附加到Model定义的事件。 这允许双向通信,同时继续隐藏ViewModel中的View,以及Model中的ViewModel:
201810082126560413
MVVM旨在利用XAML,特别是基于XAML的数据绑定。 通常,View是一个使用XAML构建用户界面的页面类。 因此,View和ViewModel之间的连接主要 - 或许只能 - 基于XAML的数据绑定:
201810082127060414
对MVVM充满热情的程序员通常有一个非正式的目标,即在基于XAML的数据绑定的页面类中表达View和ViewModel之间的所有交互,并在此过程中将页面代码隐藏文件中的代码简化为简单 InitializeComponent调用。 这个目标在现实生活中很难实现,但是当它发生时很高兴。
当MVVM被引入时,小程序 - 例如像这样的书中的程序 - 经常变得更大。 不要让这劝阻你使用MVVM! 使用这里的示例来帮助您确定如何在更大的程序中使用MVVM,并且您最终会发现它在构建应用程序时有很大帮助。

目录
相关文章
|
10月前
|
存储 SQL 前端开发
借一个项目谈Android应用软件架构,你还在套用MVP 或MVVM吗
借一个项目谈Android应用软件架构,你还在套用MVP 或MVVM吗
|
前端开发
[译] 实用的 MVVM 和 RxSwift
今天我们将使用 RxSwift 实现 MVVM 设计模式。对于那些刚接触 RxSwift 的人,我 在这里 专门做了一个部分来介绍。
1317 0
|
前端开发 JavaScript Android开发
|
前端开发 JavaScript Android开发
|
前端开发 JavaScript Android开发
|
前端开发 Android开发 Windows
|
前端开发 JavaScript Android开发
|
前端开发 JavaScript Android开发
|
JavaScript 前端开发 Android开发