APP下载

基于UC客户端的MVVM应用与研究

2015-12-27吕磊杨雪朱礼鹏谢俊虎金元

计算机与网络 2015年5期
关键词:通话控件视图

吕磊 杨雪 朱礼鹏 谢俊虎 金元

(1 国网眉山供电公司,四川眉山 511402)(2 国网洪雅供电有限责任公司,四川成都 620365)

基于UC客户端的MVVM应用与研究

吕磊1杨雪1朱礼鹏1谢俊虎1金元2

(1 国网眉山供电公司,四川眉山 511402)(2 国网洪雅供电有限责任公司,四川成都 620365)

针对统一通信客户端软件的界面控制逻辑和通信业务逻辑存在的耦合问题,通过分析MVVM的模式结构和工作原理,提出了应用MVVM模式构建统一通信客户端软件的设计思路和解决方法,以实现业务逻辑和界面间的松耦合。重点分析了MVVM的模型、视图、视图模型的三层架构,以及数据绑定和命令机制等特性;在对语音业务流程分析的基础上,应用MVVM模式进行了实现,对各层的实现做了解析和说明。并讨论了如何利用视图模型进行单元测试。

MVVM ViewModel统一通信WPF数据绑定

1 引言

为了支持各种通信业务,统一通信(Unified Communication,UC)客户端往往将业务封装成为不同的服务,通过订阅在通信过程中产生的各种事件完成数据处理和控制逻辑,同时将结果反馈给用户界面(User Interface,UI)。众多分散的控制和事件处理逻辑,导致了用户界面与业务逻辑间具有较强的耦合性,用户界面的呈现逻辑复杂且难以维护。尤其是当用户界面进行重构或修改时,往往需要对程序进行多处修改,限制了系统的可维护性和可扩展性。

随着微软WPF(Windows Presentation Foundation)技术的出现,其革命性的创建软件方式和全新的Windows图形用户界面技术,使其越来越成为主流的开发选择[1,2]。同时,MVVM模式(Model View ViewModel,MVVM)利用WPF的新特性和对界面的封装,更加彻底地实现了业务逻辑和界面的分离,能够很好解决统一通信系统客户端的复杂UI逻辑的问题。

2 MVVM模式分析

2.1 MVVM的发展

从出现用户界面开始,就出现了与之相关的设计模式,目标是实现界面和业务间的松耦合,使设计人员专注于设计良好的界面,开发人员专注于业务逻辑的实现。较早出现的MVP模式[3](Model View Presenter,MVP)目前已被广泛使用到UI开发平台上,由模型Model提供数据,视图View负责显示,展示器Presenter负责逻辑处理。由于展示器包含了对视图的渲染,二者进行频繁地交互,使得展示器与特定的视图的联系过于紧密,一旦视图变更,那么展示器也往往需要变更。

2004年,Martin Fowler提出了PM模式(Presentation Model,PM),该模式在MVP基础上分离了视图中的动作和状态,并通过对视图的抽象创建表示模型,使视图仅仅成为表示模型的一个呈现。但是,该模式的表示模型负责视图的状态更新和同步,导致作为表示模型的类比较庞大和复杂,较难维护。

2005年,John Gossman在MVP和PM的基础上提出了MVVM模式[4,5]。与MVP中的展示器Presenter不同,MVVM中的视图模型ViewModel并不需要对视图的引用,也不需要维护视图与视图模型的交互。而MVVM与PM不同之处在于,虽然都对视图做了抽象,但Fowler提出的PM是与UI平台无关的抽象,而MVVM是利用WPF的核心特性(数据绑定和命令机制)进行了简化,是专门针对WPF和Silverlight平台[6]提出的。在MVVM模式中,视图View不知道模型Model的存在,模型Model也不知道视图模型ViewModel和视图View的存在,充分实现了界面与业务逻辑的分离。

视图模型ViewModel是MVVM模式的核心内容,连接了模型Model和视图View,实现数据与呈现的同步,并执行来自视图的动作。视图模型通过对视图的抽象,以数据属性的形式向视图提供必需的数据,以命令属性的形式向视图提供执行的操作。而视图模型的数据和命令属性,可以认为是对模型的数据和业务的再次封装,从而实现了模型和视图之间的松耦合。

总之,在MVVM模式中视图仅需考虑良好的数据呈现和友好的交互方式;模型则专注于建立数据和业务模型,实现业务逻辑;视图模型则承上启下,实现了简单有效的数据同步以及灵活的命令操作。

3 MVVM工作原理

2.2 MVVM模式结构

实现MVVM模式的关键是利用了WPF的2个重要特性数据绑定以及命令机制。

优数据绑定

数据绑定是在用户界面和业务数据之间建立连接的过程,而进行数据绑定的关键是使用Binding对象,该对象将源属性和目标属性粘在一起,并在两者间建立了合适的通信机制。只需要进行一次绑定,那么在清除绑定前,就会由这个绑定对象负责所有的同步工作,如图2所示。

MVVM模式由模型(Model)、视图(View)和视图模型(ViewModel)三部分组成,其体系结构如图1所示。

模型Model通过建立数据和业务模型,负责系统中的核心数据和业务处理逻辑。通常该层下面还包括了一个数据访问层,负责完成对底层数据访问的封装,如对数据库、数据文件的操作等。

图1 MVVM模式体系结构

视图View是系统与用户的图形接口,即交互界面,在WPF中表现为XAML文件。在视图上绑定视图模型的特定属性,实现数据同步和命令响应,这些属性是在视图模型中暴露的模型的数据和业务。视图和视图模型属性间的绑定是通过设置视图模型对象到视图的DataContext属性实现的。如果视图模型中的属性值发生变化,新值通过绑定对象自动传播给视图。当用户在界面上点击按钮时,一个位于视图模型上的Command被执行请求的动作。

图2 属性间的绑定

目标属性必须是依赖属性,利用内建的传递变更通知能力实现更新时自动通知源属性,在WPF的UI控件中大部分的属性为依赖属性。源属性需要实现INotifyPropertyChanged接口来通知更新目标属性,从而实现数据同步。数据绑定使得属性间的数据同步更新变得异常简单,仅需要在XAML文件中将源属性绑定到对应的控件属性上即可。

悠命令机制

只使用数据绑定,还无法做到用户界面的友好交互,因而,需要WPF提供的内建的命令机制支持。命令表示的是与用户界面分离的动作,相对于控件的事件,更为抽象和松耦合。将实现了ICommand接口的命令属性绑定到视图中控件的Command属性上,当控件的命令被触发时,命令属性所表示的操作将被执行;当命令属性对应的操作失效时,就会禁用该控件,从而自动实现了命令属性与控件状态的同步。

4 MVVM模式的应用

在统一通信系统的客户端,存在着众多分散的控制和事件处理逻辑,对于用户界面的显示和控制逻辑也相对更复杂。为此,使用MVVM模式构建统一通信系统客户端可以大大简化对界面的呈现控制,避免将界面呈现控制代码嵌入到通信业务逻辑中。下面以语音通信为例,分析MVVM模式的应用。

4.1 流程分析

统一通信的客户端既可以作为语音呼叫者,也可以作为被呼叫者。从一方发起语音呼叫开始,再到语音通话结束,在整个呼叫和通话过程中接收不同命令,呈现出不同的呼叫流程和通话状态。以发送语音呼叫为例,其流程如图3所示。在发送出语音呼叫后,还有可能取消呼叫命令;在判断是否建立通话时,还需要判断是否接听、拒接或呼叫超时;在通话中还可能出现保持通话以及恢复通话的命令;在通话完成后还要结束通话。

图3 语音呼叫流程

4.2 应用设计

对语音呼叫流程进行分析,从呼叫开始到整个过程结束,包括呼叫者、被呼叫者、语音通话等数据模型;发送语音呼叫、取消语音呼叫、保持通话、恢复通话、结束通话等命令;对于界面呈现包括呼叫者身份信息、被呼叫者身份信息、语音通话状态等。使用MVVM模式实现该业务,其构造的类图如图4所示,图中仅列出了关键类、属性和操作。

在类图中可以清晰看出MVVM模式的结构,视图类AudioSessionView、视图模型类AudioSessionViewModel以及模型类AudioSession。视图AudioSessionView对应着窗口文件AudioSessionView.xaml,即使用XAML描述的界面,只需要在初始化时完成对AudioSessionViewModel的引用,并在XAML文件中进行数据和命令绑定。视图模型AudioSessionViewModel引用了AudioSession对象,并将暴露给视图的数据和命令封装为属性,如CallerDisplayName、CalleeDisplayName、DialCallCommand、HangupCommand等,作为视图模型层还可以引用多个模型对象,以封装不同的数据和业务逻辑。模型AudioSession是基础的数据模型,包含了呼叫者AudiaoCaller和被呼叫者AudioCallee,同时包含了业务处理逻辑MakeCall、HangupCall等,可由视图模型完成调用。

图4 语音呼叫类图

4.3 关键实现说明

在实现MVVM模式时必须满足以下条件,才能进行正确的数据同步更新和命令响应。

①视图模型必须实现INotifyPropertyChanged接口,该接口含有一个PropertyChanged事件。AudioSessionViewModel通过父类实现INotifyPropertyChanged接口,并提供触发事件的方法OnPropertyChanged;

②在视图模型AudioSessionViewModel中封装数据属性时,在set方法中调用OnPropertyChanged方法,并传入正确属性名称;

③在视图模型AudioSessionViewModel中封装命令属性时,必须返回ICommand对象;在RelayCommand类中实现ICommand接口,AudioSessionViewModel的命令属性仅需要生成和返回RelayCommand对象,并通过其构造函数传递命令执行的代理方法;

④在视图AudioSessionView中对需要控制显示的控件绑定数据属性;

⑤在视图AudioSessionView中对需要响应命令的控件绑定命令属性。

5 利用ViewModel实现单元测试

MVVM模式不仅提供了界面和业务逻辑的分离,它的视图模型ViewModel也非常易于进行单元测试。在使用MVVM模式开发WPF程序时,整个应用程序的交互逻辑在一组ViewModel类中,并且不依赖任何UI对象,通常可以不用考虑界面是否已经实现,就可以完成单元测试。利用Visual Studio提供的单元测试机制,可以轻松编写测试程序,自动执行完成单元测试,从而提高了开发和测试的效率。

6 结束语

在UC系统客户端应用MVVM模式,可以使开发人员专注于关键的业务实现,而不用关心繁杂的界面逻辑,提高了程序的可测试性和可维护性,充分体现了软件设计“高内聚,低耦合”的原则。但是,由于MVVM模式过渡依赖WPF的特性,使它的应用范围受到了严格的限制。尽管如此,在合适的场景下应用MVVM模式,将最大程度地提升软件的质量和扩展性。

[1]琚彬.基于WPF平台的自定义控件开发[D].西安电子科技大学,2008.

[2]徐滔.WPF控件设计综述[J].现代计算机(专业版),2009(7): 102-105.

[3]王建平.MVC&MVP集成模式在RIA开发中的应用[J].软件导刊,2009(7):115-117.

[4]刘立.MVVM模式分析与应用[J].微型电脑应用,2012(12): 57-60.

[5]李猛坤,陈明.一种基于扩展MVVM模式的面向服务软构件模型[J].科学技术与工程,2011(10):2349-2352.

[6]李龙澍,华骁飞.Silverlight下的MVVM模式的应用[J].计算机技术与发展,2013(12):203-207.

Application and Research on MVVM Based on UC Client

LV Lei1,YANG Xue2,ZHU Li-peng1,XIE Jun-hu1,JIN Yuan2
(1 State Grid Meishan Power Supply Company,Meishan Sichuan 511402,China; 2 State Grid Hongya Power Supply Company,Chengdu Sichuan 620365,China)

Aiming at the coupling problem in the interface control logic and communication service logic of UC client software,the design ideas and solutions for constructing UC client software by MVVM mode are presented on the basis of analyzing the mode structure and operating principle of MVVM,so as to implement the loose coupling between service logic and interface.The features of MVVM such as three-layer architecture-model,view and view model,as well as data binding and command mechanism are analyzed in detail;on the basis of analyzing voice service flow,the implantation is achieved by MVVM mode,and the analysis and explanations for all layers are made.The solution of unit test by using view model is discussed.

MVVM;View Model;UC;WPF;data binding

TP311.1

A

1008-1739(2015)05-55-4

定稿日期:2015-02-12

猜你喜欢

通话控件视图
《戊戌元日与友人通话》
关于.net控件数组的探讨
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
视频通话在煤矿井下的应用
ASP.NET服务器端验证控件的使用
2013年11月通信业主要指标完成情况(一)
2013年3月通信业主要指标完成情况(一)