一、基本概念
- WPF:WPF(Windows Presentation Foundation)是(微软推出的)基于Windows的用户界面框架,提供了统一的编程模型,语言和框架,做到了分离界面设计人员与开发人员的工作;WPF提供了全新的多媒体交互用户图形界面。相比于WinForm传统开发,在WPF中,通过核心的MVVM设计思想,实现前后端的分离。
- MVVM:MVVM是Model-View-ViewModel(模型-视图-视图模型)的缩写形式,它通常被用于WPF或Silverlight开发。MVVM的根本思想就是界面和业务功能进行分离,View的职责就是负责如何显示数据及发送命令,ViewModel的功能就是如何提供数据和执行命令。各司其职,互不影响。我们可以通过下图来直观的理解MVVM模式:
View就是负责界面的排版、美观等,其跟业务的联系是通过绑定的设置,比如一个按钮可以绑定Icommand类型,通过再定义Icommand中增加委托就可以相应事件了;
ViewModel对应的是View,一般的有一个view叫xx,那么就有一个对应的叫xxViewModel.cs,负责对应的xx view的数据和命令的提供,他们之间是需要依赖注入,即这个xx view涉及的数据、命令事件在哪个viewmodel里面定义,就是指定上下文,如果用Prism,那可以在view的xalm文件里面定义自动绑定同名的viewmodle。
Model里面一般定义的是实体数据模型,比如数据库里面的一个表的数据模型。
例如
- Prism:Prism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。通过Prism,可以简化原生MVVM实现方式,并引入分模块设计思想。在Prism中,每一个功能,都可以设计成一个独立的模块,各个模块之间松耦合,可维护,可测试。框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能。在后续程序功能设计中,都会用到。
- ORM框架:客户端怎么与服务器进行数据访问呢?比如数据库在服务器哪里,客户端要与数据库进行访问(增删改查等),可以通过对应的数据库提供的API进行数据库远程连接,然后用SQL语言进行数据库的指令编成,单这样很不友好,这样就可以用到ORM框架了。(Object Relational Mapping ,简称ORM ,或O/RM ,或O/R mapping),说白了就是一个类似库房,库房的工件来自数据库,工厂(客户端)可以来到库房取料,就是一个连接中间站,这个站定义了很多接口,对应的数据库的增删改查指令操作的功能(封装),客户端只需要通过这些接口就可以通过面向对象的编程方式实现数据库的访问与操作,就不需要写哪些用以写错的SQL指令了.这样一般在客户端都会定义与数据库表对应的数据实体类,还有一个很重要的功能是因为这些在客户端的实体类是与数据库的表是对应的,还可以通过客户端利用ORM接口实现快速创建数据库表,即可以双向的。这样ORM框架下,只需要配置一下服务器数据库,就可以切换到不同的数据库系统了。
WebApi就是这样的一种模式,ORM有很多中,比如EntityFramework是.Net领域通用的ORM 框架,有CodeFirst和DBFirst两种方式,DBFirst方式,即先设计数据库表结构,再创建实体和映射。CodeFirs是通过面向对象编程创建数据库。如果要使用EntityFramework框架,首先进行安装,可通过NuGet包管理器进行安装
二、开发是模块化思想
把各块业务作为单独一个项目(模块)进行开发,包括一些界面内容的更新,主模块的view定义了基本的主要界面,然后分成regions,每个regions的内容可以导航到对应的模块里面的view,这样就可以形成主界面只负责自己的界面定义,内容实际是各个模块进行实时计算更新的。模块之间需要配置好模块引用,可以通过dll文件指定的方式,也可也通过注册的方式。
三。WebApi
一般需要定义控制器、服务接口、数据库与数据实体类对应关系设定(Dbset),数据库连接配置。
1.控制器就是定义了在服务器端提供的访问接口,比如通过http访问的url;
2.服务接口对应了各种数据库操作的封装;客户端调用这些服务实现数据库的操作;
3.数据库与数据实体类对应关系设定,就是绑定的数据库表对应的数据类实体;
4.数据库连接配置,就是设置好数据库访问的参数。一般在appsettings.json文件里面定义,然后再Program.cs文件里面进行指定,
builder.Services.AddDbContext<DataContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
(注,以上用到的图是来源与CDSN 公子小六博文里面的教程博客,可进去他相关教程学习更多内容)