濮阳网站公司,wordpress增加变量,自己创网站,交换链接营销案例JHRS一个新学WPF的IT老鸟#xff0c;肝了2个月做了这么一个WPF企业级开发框架#xff0c;站长clone学习#xff0c;觉得甚是不错。这是一个使用了Prism搭建的插件式框架#xff0c;封装了DataGrid的使用#xff0c;使整个框架子模块简单易学、易扩展#xff0c;特别是作者… JHRS一个新学WPF的IT老鸟肝了2个月做了这么一个WPF企业级开发框架站长clone学习觉得甚是不错。这是一个使用了Prism搭建的插件式框架封装了DataGrid的使用使整个框架子模块简单易学、易扩展特别是作者还写了一个系列博客教程值得点赞。下面是作者博文系列首篇WPF企业级开发框架搭建指南启示录2020从入门到放弃这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中有感于必须统一掉一些规范上的事情并且提高团队开发效率遂折腾了这么一个半吊子的框架这个标题WPF企业级开发框架搭建指南2020从入门到放弃可能会唬住一些人但看到这些零碎文字的朋友就凑和着看吧如果能帮助到你那也荣幸了。WPF技术是一个很不错的技术但一直没有上手过正式的项目趁在做这个医疗项目时遂搭建一个WPF开发框架目的是为了统一WPF开发并提高开发效率我对WPF技术算是零基础现学现卖用这些不成体系的文字予以记录一些想法和实践。WPF企业级开发框架搭建系列文章导航WPF企业级开发框架搭建指南启示录JHRS开发框架之基础类库JHRS开发框架之第三方框架选型JHRS开发框架之WPF调用Web API封装JHRS开发框架之客户端入口项目JHRS开发框架之各子系统如何整合JHRS开发框架之怎样设计合理的ViewModel基类JHRS开发框架之公用组件用户控件的封装JHRS开发框架之建议遵循的一些建目录文件原则JHRS开发框架之WPF数据验证JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法JHRS开发框架之踩坑记终章WPF管理系统开发框架设计图在正式开始WPF开发框架搭建之前做了一些技术选型和在群里面咨询了下对WPF技术比较了解的群友当中就属dotnet9.com的站长经常被笔者叨扰。先来说说我期望中的开发框架要实现哪些功能。在开始搭建之前呢还是晾一下最终的架构图吧。WPF基于WEB API开发管理系统框架上图就是折腾出来的一个框架图不美观的话大伙也就凑合着看吧。下图是解决方案框架解决方案开源地址https://github.com/jhrscom/jhrs官方博客https://jhrs.com用到插件https://marketplace.visualstudio.com/items?itemNamePeterSpa.XamlBinding开发环境因为项目是使用WPF来开发的自然基于【MVVM】的理念搭建了这么一个快速开发框架适用于开发【传统类型的管理系统】并通过调用web api的方式来完成所有的业务操作在WPF的Page窗体Window用户控件的后置代码几乎不会有任何的业务代码除了一些控制界面行为的功能。在搭建这个框架时是基于最新的 【 .net 5】用的技术版本是比较新的演示代码中wpf也是使用 .net 5。采用.NET 5开发使用技术说明技术平台.Net 5.0技术框架WPF Prism AspectInjector RefitIoC组件Prism自带Prism.Unity数据序列化Newtonsoft.Json可替换日志记录系统自带解决方案详解解决方案从上到下依次为JHRS.Core客户端业务核心客户端业务核心在JHRS.Core这个库里面各个目录功能说明如下Aop实现了一个点击按钮显示转圈圈效果的类一般用于加载数据点击按钮从服务器获取数据让用户等侯片刻。Apis保存着代码生成工具【JHRS.GenerateAPI】自动生成的接口该工具可以在线解析swagger生成供调用的接口参见这里使用该工具需要设置swagger地址另外有bug的话自己修改下就可以了。Controls定义了WPF界面使用的公用控件保存在Controls目录如通用表格DataGrid下拉框等凡公用的控件都可以保存在此目录。Enums公用的枚举各个模块可以引用。Events事件类Prism自带事件总线相应的事件类在这个目录创建具体应用参见这里。Extensions扩展类Identity身份认证即登录系统后从服务器端获取到的身份认证会话信息用户token等。Models各个模块的DTO对象一般是根据swagger解析出各个接口的实体对象输入输出DTO。Modules模块的辅助类。ViewModels这个目录里面定义了ViewModel的基类处理各个功能Page业务的ViewModel类需要从这里继承对应的类如管理页面继承BaseManagePageViewModel而新增编辑页面继承BaseDialogPageViewModel类等。并且在基类里面定义了公共方法如消息提示框消息弹框打开模态窗口等效果见下方所示。JHRS.ShellWPF客户端入口程序WPF客户端入口程序JHRS.Shell是WPF客户端项目的入口程序并且定义了整个系统公用的消息提示框模态窗口风格主窗口等登录的入口也是在这里定义的登录系统后可以自行实现权限功能加只加载对应的子模块子系统在程序启动时会自动做一些初始化操作扫描程序集自动注入相关功能具体实现参见这里。消息提示框消息提示框消息弹框消息弹框确认消息框确认消息框模态窗口模态窗口遮罩层效果蒙层效果或Loading效果遮罩层效果一般用于点击按钮加载数据时使用即调用接口到数据呈现中间有一个等待的过程就可以显示出来因此在框架中通过AOP方式封装了这么一个效果调用时在相关的地方标记一个特性即可。先来看看效果。遮罩层效果该效果是直接从CSDN抠过来的然后整到到代码里面去的纯演示目的。参考链接https://blog.csdn.net/lhx527099095/article/details/8005095modules解决方案文件夹modules解决方案文件夹在modules这个解决方案文件夹里面的是各个子模块也就是各个子系统例如【JHRS.OutpatientSystem】是WPF项目的子系统之一门诊模块在各子系统中最外层拥有一个Module的类OutpatientSystemModule需要实现IModule接口供Prism自动扫描注册到容器里面。在子模块中目录的组织原则如下。目录组织原则|----- JHRS.OutpatientSystem 命名规则【JHRS】点【模块名称】
|----- Controls 表示当前模块的控件库存放目录
| |------- Manager 子目录
| |------- SysManager 子目录
| |--------其它子目录
|------ Extensions 当前模块扩展类
|------ Model 当前模块实体如查询条件实体
|------ ViewModels 【固定命名不能改动】
| |------ScheduManager 各管理功能目录
| |--------XXXXViewModel.cs 每个功能页面的ViewModel类
| |--------其它ViewModel.cs 其它页面的ViewModel
|-------Views 【WPF页面固定命名】
| |------ ScheduManager 功能目录
| |------XXXXXXX.xaml WPF页面
| |------XXXXXXX.xaml WPF页面
| |-------SysManager 功能目录
|------- OutpatientSystemModule 命名模块名称Module
在每一个子系统中最外层的一个模块类名称规则为【模块名称Module】编写这个类是为了使用Prism加载这个模块。JHRS基础类库JHRS基础类库基础类库可以任意扩展该库可以供其它所有库引用。JHRS.GenerateAPI代码生成工具该工具是在线解析swagger生成供Refit调用的接口生成的接口如下接口调用接口的示例代码如下var response await RestService.ForILoginApi(baseUrl).Login(CurrentUser);if (!response.Succeeded){ Alert(response.Message); return;}
最后对于WPF开发来说我并不是很熟悉这段时间以来一直网上学习和借鉴一些开源的框架再结合实际项目而整出来的这个开发框架可能对于从事WPF开发的朋友来说有一定的借鉴意义。完整的项目代码已经开源到github上面。在这个项目中并不包含web api的项目。开源地址https://github.com/jhrscom/jhrs官方博客https://jhrs.com