WPF理论概述与模式框架(三层架构、MVC与MVVM)

本节我们简单介绍WPF的核心作用,并据此谈论三层架构,进而引申出WPF设计中常用的MVC和MVVM模式,最后再据此总结WPF的开发特性和前景优势。开发者需要明确认识WPF技术的使用目的,并熟知三层架构,明确MVC和MVVM模式的组成和逻辑。

1.1 WPF技术概述

WPF全称为Windows Presentation Foundation,是一种基于XAML、.NET和向量绘图技术的展示层开发框架,广泛用于软件图形界面的开发,是一种专门用来编写程序表示层的技术和工具。微软和其它平台上用于开发表示层的技术还有:

  • WinForm:即Windows Form,是一种基于Windows操作系统的图形用户界面(GUI)应用程序开发框架。WinForm提供了一套完整的用户界面控件,可以快速创建Windows桌面应用程序。
  • ASP.NET:微软公司推出的新一代脚本语言,是创建动态Web页的一种强大的服务器端技术。
  • Silverlight:一个跨浏览器、跨客户平台的技术,能够设计、开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程序。
  • Avalonia:一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件,确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。这意味着开发人员可以共享他们的UI代码,并在不同的目标平台上保持统一的外观和感觉。

对于同一逻辑功能的项目,无论使用何种技术进行表示层的开发,其逻辑层和数据层都是相同的。由表示层、逻辑层和数据层构成的架构形式称为三层架构。

1.2 三层架构

1.2.1 三层架构的概述

除了一些非常小巧的工具和插件外,大部分应用程序使用的都是多层架构的模块设计形式,最基本的就是三层架构。三层架构以高内聚、低耦合的思想,把程序的各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构。三层架构的设计可以使得程序模块分工明确,划分具体开发工作,提高开发质量和开发效率,进而为软件系统日后的更新和维护提供较大便利。其结构示意图和大致功能如下。

  • 数据层(DAL):用于存储数据,多由数据库构成,有时也用数据文件[//]: # (数据文件是一种计算机系统上常见的类型文件。它可以采取纯文本文件的形式,编码加密存储。常见的数据文件格式有.DAT、.XML、.TBL等。)辅助存储数据。
  • 业务逻辑层(BLL):根据需求使用计算机程序表达现实的业务逻辑。
  • 表示层(UI):将数据和流程过程结果展示给用户看。

例如在图书管理系统中,按照三层架构可以将功能划定为:

  • 数据层(DAL):使用数据库存储图书信息、借阅信息等。
  • 业务逻辑层(BLL):实现图书存储、借阅登记等功能的具体逻辑功能代码。
  • 表示层(UI):呈现图书信息,提供用户进行记录和修改等交互操作。

1.2.2 数据操作层的划定

数据操作层包含公共数据访问代码,是用于操作和交互数据库中数据的逻辑代码。一般来说,数据层中包含数据库和一些存储过程。将包含数据访问逻辑代码的数据操作层划定在业务逻辑层或数据层是当下项目设计的两种常见划分形式。

将数据操作的逻辑代码置于业务逻辑层时,使得数据访问成为一种业务逻辑。业务逻辑层当中的其它核心功能通过同层的数据操作类访问数据,在表示层调用业务逻辑层的方法。因此在这种划定下,表示层对于数据的访问与业务逻辑层对于数据的操作调用的是相同的方法。在架构设计中,根据高内聚、低耦合的原则,我们希望上层的模块可以不必关心其它底层的操作细节。据此,更为标准的三层架构形式是将对数据的操作业务逻辑存放在数据层。

将所有的数据读取操作存放在数据层时,只需要在业务层再定义一个方法供表示层调用。在这种划定下,业务逻辑层和表示层都不需要了解底层的数据库,使得各层之间的功能解耦。

据此,我们常把数据层又称为数据访问层,定义为:

  • 数据访问层(DAL):直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

例如在图书管理系统中,数据库中有用于存储图书信息的数据表,其包含书名、作者、出版社和ISBN号等字段,该表存储图书的数据信息。

若将数据操作的逻辑代码置于业务逻辑层,在该层中,设定一个用于操作数据库的类DBoperator,并在该层中定义一个图书操作类BookManager,通过GetBookInfo()的方法用于访问到图书信息。其结构图如图所示。

此时,业务逻辑层想要获取图书信息时,需要调用GetBookInfo()方法,而表示层也通过此方法去调用图书信息,其它同层的业务逻辑需要图书信息时也需要调用到该方法。且DBoperator还可能需要针对不同的数据库甚至是多种数据库而增加或变更其中的方法。

若将所有的数据读取操作存放在数据层,将DBoperator类定义在数据层,并在该层中定义一个GetInfo()类用于获取数据库中的各种数据信息,其中包含一个CheckBookInfo()的方法用于获取图书信息。在业务逻辑层中,编写一个BookManager类,其GetBookInfo()方法用于从DAL层的CheckBookInfo()得到图书信息,且该方法专门提供给UI层调用。其结构关系图如图所示。

此时,BLL层中的其他业务方法可以通过DAL层的GetInfo类获取到相关信息,而UI层可以通过BLL层提供的方法得到数据,可以减少同层之间的模块依赖,使得三层架构功能划定更为清晰合理。三层架构的分层模式是典型的上下关系,上层依赖于下层。

1.2.3 数据交互容器与载体

在三层架构的各层模块之间,通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

实体类库是数据库表的映射对象,在系统软件实际开发的过程中,要建立对象实例,将关系数据库表采用对象实体化的方式表现出来,辅助软件开发中对各个系统功能的控制与操作执行,并 把数据库表中的所有字段映射为系统对象,建立实体类库,进而实现各个结构层的参数传输,提高代码的阅读性。从本质上看,实体类库服务三层之间的数据参数传输。

1.2.4 三层架构的优点

  1. 高内聚、低耦合,可以降低层与层之间的依赖。
  2. 各层互相独立,完成自己该完成的任务,项目可以多人同时开发,开发人员可以只关注整个结构中的其中某一层。
  3. 容易移植、维护,如B/S转C/S、SQLServer 转 Oracle、添加、修改、删除等。
  4. 有利于标准化和各层逻辑的复用。
  5. 安全性高。用户端只能通过业务逻辑层来调用数据访问层,减少了入口点。

1.3 MVC和MVVM模式

1.3.1 表现模式与架构模式

我们经常听说的MVC、MVP、MVVM都是常见的表现模式(Presentation Pattern),它通过分离关注点来改进代码的组织方式。其不同于设计模式(Design Pattern),设计模式是为了解决一类问题而总结出来的抽象方法,表现模式侧重于解决代码组织,往往使用了多种设计模式,因此其也称作复合设计模式。

而相对于三层架构而言,三层架构是一种基于业务逻辑来分的软件架构模式(Architecture Pattern),MVC、MVVM等表现模式是基于页面类分的一种复合设计模式,即一种解决方案。更直接的说法是,三层架构属于软件整体架构,MVC、MVVM等属于页面框架设计,因此架构模式和表现模式是可以共存的。

在前面的介绍中我们知道,WPF是专门用于表示层开发的技术工具,因此下面我们主要谈论MVC等对于表示层的应用,要注意的是,其也可以在后端进行框架设计。MVC和MVVM作用于三层架构中的UI层,也就是说,其把三层架构中的UI层再度进行了分化,三层架构与表现层的框架模式是共存的。例如在MVC( Model-View-Controller)中,严格说这三个加起来才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化。

1.3.2 MVC模式

1.3.2.1 MVC模式简介

MVC模式是GUI界面开发的指导模式。它基于表现层功能划分的思想把程序分为三大部分:Model-View-Controller,呈三角形结构。Model是数据模型,View是用户界面,Controller是控制器。MVC的设计目的是实现功能结构的规划。

  • 模型(Model):[处理程序逻辑] [获取和存放数据] 应用程序的主体部分,包含业务数据、业务逻辑及具体实现、状态管理等功能。
  • 视图(View):[显示数据] [提供用户交互界面] 应用程序中用户界面相关的部分,是用户看到并与之交互的界面。 就是与用户实现交互的页面,通常实现数据相对于用户的输入和输出功能。
  • 控制器(Controller):[处理用户交互] [从View读取数据] [向Model发送数据] 根据用户的交互操作,控制用户界面数据显示和更新model对象状态。起到控制整个业务流程的作用,实现View层跟Model层的协同工作。
1.3.2.2 MVC之间的通信与三层架构的联系

有关MVC之间的通信,在不同领域和应用场景中众说纷纭,这里以微软官方帮助文档的ASP.NET Core MVC模式为主要参考进行介绍。用户请求被路由到控制器,后者负责使用模型来执行用户操作和/或检索查询结果。 控制器选择要显示给用户的视图,并为其提供所需的任何模型数据。

MVC的通信核心就在于控制器Controller,以控制器为核心划分了视图和数据,但并非是完全分离的,View和Model之间在实际项目中是存在一定联系的。MVC之间的通信是单向进行的,View和controller是单向引用。而实际中View和Controller也是有数据交互的。

以简单的登陆模块为例,输入用户名和密码,校验正确跳转页面,输入错误则提示个错误信息。 这个模块中,起始的输入用户名密码的页面跟经过校验后跳转的页面就相当于View; Controller页面用于接收输入进来的用户名密码,其中经过校验后返回的一个标志位为Flag;Model是用于校验的类,其处理输入的账户信息是否与设定好的信息一致,之后返回一个Flag结果。 这样就完全实现了逻辑跟页面的分离,View只负责显示;Controller无需知道Model的判断结果如何,只需将输入的信息和结果传递到对应的模型和页面上;Model只需要根据Controller提供的输入信息,运算出Flag结果值。

MVC是表现模式(Presentation Pattern),三层架构是典型的架构模式(Architecture Pattern),三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,而是相互协作关系。MVC和三层架构基本没有可比性,是应用于不同领域的技术。

1.3.2.3 使用MVC的场景和作用

总结一下,MVC模式的优点其实就是它划分了功能模块,有利于软件工程化管理,由于不同的层各司其职,每一层不同的应用具有某些特性,有利于通过工程化、工程化管理程序代码,可以使用控制器来连接不同的模型和视图去完成客户的需求。控制器可以根据用户需求选择模型进行处理,然后选择视图处理结果显示给用户。总之,MVC可以使得我们更加方便、合理、快捷地设计和管理项目。

1.3.3 MVVM模式

1.3.3.1 MVVM模式简介

MVVM即Model-View-ViewModel,它是一种基于前端开发的表现模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得 ViewModel 的状态改变可以自动传递给 View。MVVM与MVC的Model和View基本类似,主要区别在于MVVM的ViewModel。

ViewModel是MVVM模式的核心,它是连接View和Model的桥梁。它有两个方向:

  • 将Model转化成View,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。
  • 将View转化成Model,即将所看到的页面转化成后端的数据。实现的方式是:事件监听。

这两个方向都实现的,我们称之为数据的双向绑定。View层和Model层并没有直接联系,而是通过ViewModel层进行交互。

ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。

1.3.3.2 MVVM模式的优点
  1. 低耦合:视图View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2. 可重用性:可以把一些视图逻辑放在ViewModel里面,让很多view重用这段视图逻辑。
  3. 独立开发:开发人员可以专注业务逻辑和数据的开发,设计人员可以专注页面设计。
  4. 可测试:界面向来比较难预测时,测试可针对ViewModel来写。

1.3.4 MVVM与MVC的区别

在MVC里,View是可以直接访问Model的,所以View里会包含Model信息以及一些业务逻辑,反之亦然。 MVC模型关注的是页面功能的划分,且在于强调控制器的作用,所以在MVC模型里,Model和View是存在一定的依赖关系的。

MVVM在概念上是真正将页面与数据逻辑分离的模式,View和Model彻底分离,View和Model不知道彼此的存在,通过数据绑定的形式把Model绑定到UI的元素上。

习题资源与面试宝典

关于WPF技术的描述,下列说法有误的是

  • [ ] WPF是一种基于XAML、.NET和向量绘图技术的展示层开发框架
  • [ ] WPF用于设计软件的数据层和业务逻辑层
  • [ ] WPF实现了界面设计和功能开发工作分离
  • [ ] WPF基于DirectX引擎

下列有关三层架构的说法,不正确的是

  • [ ] 三层架构以低内聚、高耦合的思想,把程序的各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构
  • [ ] 层架构的设计可以使得程序模块分工明确,划分具体开发工作,提高开发质量和开发效率
  • [ ] 业务逻辑层根据需求使用计算机程序表达现实的业务逻辑
  • [ ] 更为标准的三层架构形式是将对数据的操作业务逻辑存放在数据层

下列有关三层架构及其数据交互的表述,有误的是

  • [ ] 各层互相独立,完成自己该完成的任务,项目可以多人同时开发,开发人员可以只关注整个结构中的其中某一层
  • [ ] 在三层架构的各层模块之间,通过对象模型的实体类(Model)作为数据传递的载体
  • [ ] 从本质上看,实体类库服务三层之间的数据参数传输
  • [ ] 三层架构的分层模式是典型的上下关系,下层依赖于上层

下列有关表现模式和架构模式的描述,说法有误的是

  • [ ] MVC、MVP、MVVM都是常见的表现模式(PresentationPattern)
  • [ ] 架构模式是为了解决一类问题而总结出来的抽象方法,表现模式侧重于解决代码组织
  • [ ] 架构模式和表现模式是可以共存的
  • [ ] MVC或MVVM作用于三层架构中的UI层

下列有关MVC式的描述,说法有误的是

  • [ ] 使用MVC的目的是将Model和View的代码实现完全分离
  • [ ] Controller使得Model的数据和View的呈现同步
  • [ ] Model包含业务数据、业务逻辑及具体实现、状态管理等功能
  • [ ] MVC各个页面之间的通信是单向进行的

有关MVC和三层架构的表述,正确的是

  • [ ] MVC作为表现模式是上下关系的
  • [ ] 三层架构分层模式属于典型的相互协作关系
  • [ ] MVC比三层架构具有更高的重用性
  • [ ] 三层架构中,数据库变更时一般只需要修改模型即可

有关MVVM模式的描述,下列说法有误的是

  • [ ] 核心是提供对View 和 ViewModel 的双向数据绑定
  • [ ] 将Model转化成View实现的方式是数据绑定
  • [ ] 将View转化成Model实现的方式是事件监听
  • [ ] View在数据更改时,Model会监听到数据变化

有关MVVM模式各部分之间的依赖关系,下列说法正确的是

  • [ ] ViewModel可以直接获取到Model的信息
  • [ ] Model可以直接获取到ViewModel的信息
  • [ ] ViewModel可以直接获取到View的信息
  • [ ] 以上说法均正确

如何描述MVVM模式下各个部分之间的常见依赖关系?

ViewModel可以直接获取到Model的信息,直接访问模型上的属性和方法;但要注意的是,模型时不了解平台或ViewModel的,即模型不能直接获取ViewModel的信息。此外,ViewModel也不能直接获取View的信息,这取决于访问和绑定这些属性的视图。

MVVM中难以创建单元测试的是模型、视图还是 ViewModel?

视图通常主要由 XAML 实现,其最有可能与平台紧密耦合,即使对其进行编码也难以进行单元测试。

MVVM与MVC的核心区别是什么?

在MVC里,View是可以直接访问Model的,所以View里会包含Model信息以及一些业务逻辑,反之亦然。 MVC模型关注的是页面功能的划分,且在于强调控制器的作用,所以在MVC模型里,Model和View是存在一定的依赖关系的。MVVM在概念上是真正将页面与数据逻辑分离的模式,View和Model彻底分离,View和Model不知道彼此的存在,通过数据绑定的形式把Model绑定到UI的元素上。

参考文档

https://baike.baidu.com/item/三层架构/11031448?fr=ge_alaicon-default.png?t=N7T8https://baike.baidu.com/item/%E4%B8%89%E5%B1%82%E6%9E%B6%E6%9E%84/11031448?fr=ge_ala

ASP.NET Core MVC 概述 | Microsoft Learn了解 ASP.NET Core MVC 这一丰富框架如何使用“模型-视图-控制器”设计模式构建 Web 应用和 API。icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-7.0

百度安全验证icon-default.png?t=N7T8https://baijiahao.baidu.com/s?id=1705333225423245283&wfr=spider&for=pc

[61]MVC与三层架构 - 知乎三层架构和MVC三层架构 (3-tier application) 是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。 1、表现层(UI):展现给用户的界…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/339367388

为 Xamarin.Forms 设计 MVVM 视图模型 - Training | Microsoft Learn了解如何使用 MVVM 设计模式通过业务逻辑和用户界面代码来改进代码的可测试性。icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/training/modules/design-a-mvvm-viewmodel-for-xamarin-forms/

MVC和MVVM_mvc mvvm-CSDN博客区别:MVC表示“模型-视图-控制器”,MVVM表示“模型-视图-视图模型”;MVVM是由MVC衍生出来的。MVC中,View会直接从Model中读取数据;MVVM各部分的通信是双向的,而MVC各部分通信是单向的;MVVM是真正将页面与数据逻辑分离放到js里去实现,而MVC里面未分离。MVC和MVVM是两种流行的设计模式。其中,MVC表示模型-视图-控制器,MVVM表示模型-视图-视图模型; MVVM是由MVC衍生出。这些设计模式大体上都有助于开发松散组合、易于测试和维护的应用程序。MVC(Mode._mvc mvvmhttps://blog.csdn.net/weixin_45277161/article/details/123678470

Wolai阅读链接

此处提供Wolai链接,提供更好的阅读体验:

01 理论概述与模式框架本节我们简单介绍WPF的核心作用,并据此谈论三层架构,进而引申出WPF设计中常用的MVC和MVVM模式,最后再据此总结WPF的开发特性和前景优势。开发者需要明确认识WPF技术的使用目的,并熟知三层架构,明确MVC和MVVM模式的组成和逻辑。icon-default.png?t=N7T8https://www.wolai.com/eE76xaXQuwTgUT6autG4qg

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GhostKINGC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值