一个好老好老的老程序员了。
全部博文(915)
分类: Android平台
2019-11-08 09:58:43
你还记得你最早的编程经历吗?您的主要目标可能是让程序正常运行,然后让它正常工作。您可能对程序的组织或结构没有太多考虑。那是后来发生的事情。
计算机行业整体经历了类似的演变。作为开发人员,我们现在都意识到,一旦应用程序开始增长,通常在代码上强加某种结构或体系结构是个好主意。使用此过程的经验表明,在编写任何代码之前,通常最好开始考虑这种体系结构。在大多数情况下,理想的程序结构致力于“关注点分离”,通过该关注点,程序的不同部分关注于不同类型的任务。
在图形交互式程序中,一种显而易见的技术是将用户界面与底层的非用户界面逻辑(有时称为业务逻辑)分开。对图形用户界面这种体系结构的第一次正式描述称为模型 - 视图 - 控制器(MVC),但是这种体系结构从此产生了从中衍生出来的其他体系结构。
在某种程度上,编程接口本身的性质会影响应用程序架构。例如,包含带有数据绑定的标记语言的编程接口可能会建议构建应用程序的特定方法。
确实有一个专门针对XAML设计的架构模型。这称为Model-View-ViewModel或MVVM。本章介绍了MVVM的基础知识(包括命令接口),但您将在下一章中看到有关MVVM的更多信息,其中包括集合视图。此外,Xamarin.Forms的一些其他功能通常与MVVM结合使用;这些功能包括触发器和行为,它们是第23章的主题。
MVVM将应用程序分为三层:
该模型不了解ViewModel。 换句话说,模型对ViewModel的公共属性和方法一无所知,当然也不了解其内部工作原理。 同样,ViewModel也不了解View。 如果三层之间的所有通信都是通过方法调用和属性访问进行的,那么只允许在一个方向上进行调用。 View仅调用ViewModel或访问ViewModel的属性,ViewModel同样只调用Model或访问Model属性:
这些方法调用允许View从ViewModel获取信息,而ViewModel又从Model获取信息。
然而,在现代环境中,数据通常是动态的。 通常,模型将获得必须传递给ViewModel并最终传递给View的更多或更新的数据。 因此,View可以将处理程序附加到ViewModel中实现的事件,ViewModel可以将处理程序附加到Model定义的事件。 这允许双向通信,同时继续隐藏ViewModel中的View,以及Model中的ViewModel:
MVVM旨在利用XAML,特别是基于XAML的数据绑定。 通常,View是一个使用XAML构建用户界面的页面类。 因此,View和ViewModel之间的连接主要 - 或许只能 - 基于XAML的数据绑定:
对MVVM充满热情的程序员通常有一个非正式的目标,即在基于XAML的数据绑定的页面类中表达View和ViewModel之间的所有交互,并在此过程中将页面代码隐藏文件中的代码简化为简单 InitializeComponent调用。 这个目标在现实生活中很难实现,但是当它发生时很高兴。
当MVVM被引入时,小程序 - 例如像这样的书中的程序 - 经常变得更大。 不要让这劝阻你使用MVVM! 使用这里的示例来帮助您确定如何在更大的程序中使用MVVM,并且您最终会发现它在构建应用程序时有很大帮助。