推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

JHRS

一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了一个系列博客教程,值得点赞。


下面是作者博文系列首篇:WPF企业级开发框架搭建指南(启示录),2020从入门到放弃


这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中,有感于必须统一掉一些规范上的事情,并且提高团队开发效率,遂折腾了这么一个半吊子的框架,这个标题WPF企业级开发框架搭建指南,2020从入门到放弃可能会唬住一些人,但看到这些零碎文字的朋友就凑和着看吧,如果能帮助到你,那也荣幸了。

WPF技术是一个很不错的技术,但一直没有上手过正式的项目,趁在做这个医疗项目时,遂搭建一个WPF开发框架,目的是为了统一WPF开发并提高开发效率;我对WPF技术算是零基础,现学现卖,用这些不成体系的文字予以记录一些想法和实践。

WPF企业级开发框架搭建系列文章导航


  1. WPF企业级开发框架搭建指南(启示录)

  2. JHRS开发框架之基础类库

  3. JHRS开发框架之第三方框架选型

  4. JHRS开发框架之WPF调用Web API封装

  5. JHRS开发框架之客户端入口项目

  6. JHRS开发框架之各子系统如何整合

  7. JHRS开发框架之怎样设计合理的ViewModel基类

  8. JHRS开发框架之公用组件用户控件的封装

  9. JHRS开发框架之建议遵循的一些建目录文件原则

  10. JHRS开发框架之WPF数据验证

  11. JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法

  12. JHRS开发框架之踩坑记(终章)

WPF管理系统开发框架设计图


在正式开始WPF开发框架搭建之前,做了一些技术选型和在群里面咨询了下对WPF技术比较了解的群友,当中就属dotnet9.com的站长经常被笔者叨扰。先来说说我期望中的开发框架要实现哪些功能。

在开始搭建之前呢,还是晾一下最终的架构图吧。

WPF基于WEB API开发管理系统框架

上图就是折腾出来的一个框架,图不美观的话,大伙也就凑合着看吧。下图是解决方案:

框架解决方案
  • 开源地址:https://github.com/jhrscom/jhrs

  • 官方博客:https://jhrs.com

  • 用到插件:https://marketplace.visualstudio.com/items?itemName=PeterSpa.XamlBinding

开发环境


因为项目是使用WPF来开发的,自然基于【MVVM】的理念搭建了这么一个快速开发框架,适用于开发【传统类型的管理系统】,并通过调用web api的方式来完成所有的业务操作,在WPF的Page,窗体(Window),用户控件的后置代码,几乎不会有任何的业务代码,除了一些控制界面行为的功能

在搭建这个框架时,是基于最新的 【 .net 5】用的技术版本是比较新的,演示代码中,wpf也是使用 .net 5

采用.NET 5开发

使用技术说明

  • 技术平台:.Net 5.0

  • 技术框架:WPF + Prism+ AspectInjector + Refit

  • IoC组件:Prism自带Prism.Unity

  • 数据序列化:Newtonsoft.Json,可替换

  • 日志记录:系统自带

解决方案详解


解决方案从上到下依次为:

JHRS.Core(客户端业务核心)

客户端业务核心

在JHRS.Core这个库里面,各个目录功能说明如下:

  1. Aop:实现了一个点击按钮显示转圈圈效果的类,一般用于加载数据,点击按钮从服务器获取数据让用户等侯片刻。

  2. Apis:保存着代码生成工具【JHRS.GenerateAPI】自动生成的接口,该工具可以在线解析swagger生成供调用的接口,参见这里(使用该工具需要设置swagger地址,另外有bug的话,自己修改下就可以了)。

  3. Controls:定义了WPF界面使用的公用控件(保存在Controls目录),如通用表格(DataGrid),下拉框等,凡公用的控件,都可以保存在此目录。

  4. Enums:公用的枚举,各个模块可以引用。

  5. Events:事件类,Prism自带事件总线,相应的事件类在这个目录创建,具体应用参见这里。

  6. Extensions:扩展类

  7. Identity:身份认证,即登录系统后,从服务器端获取到的身份认证会话信息(用户,token等)。

  8. Models:各个模块的DTO对象,一般是根据swagger解析出各个接口的实体对象(输入,输出DTO)。

  9. Modules:模块的辅助类。

  10. ViewModels:这个目录里面定义了ViewModel的基类,处理各个功能Page业务的ViewModel类,需要从这里继承对应的类,如管理页面继承BaseManagePageViewModel,而新增编辑页面继承BaseDialogPageViewModel类等。并且在基类里面定义了公共方法,如消息提示框,消息弹框,打开模态窗口等,效果见下方所示。

JHRS.Shell(WPF客户端入口程序)

WPF客户端入口程序

JHRS.Shell是WPF客户端项目的入口程序,并且定义了整个系统公用的消息提示框,模态窗口风格,主窗口等;登录的入口也是在这里定义的,登录系统后,可以自行实现权限功能加只加载对应的子模块(子系统);在程序启动时,会自动做一些初始化操作,扫描程序集自动注入相关功能,具体实现参见这里。

消息提示框

消息提示框

消息弹框

消息弹框

确认消息框

确认消息框

模态窗口

模态窗口

遮罩层效果(蒙层效果或Loading效果)

遮罩层效果一般用于点击按钮,加载数据时使用,即调用接口到数据呈现中间有一个等待的过程,就可以显示出来,因此在框架中通过AOP方式封装了这么一个效果,调用时在相关的地方标记一个特性即可。先来看看效果。

遮罩层效果

该效果是直接从CSDN抠过来的,然后整到到代码里面去的,纯演示目的。

参考链接:https://blog.csdn.net/lhx527099095/article/details/8005095

modules解决方案文件夹

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.For<ILoginApi>(baseUrl).Login(CurrentUser);if (!response.Succeeded){         Alert(response.Message);         return;}

最后


对于WPF开发来说,我并不是很熟悉,这段时间以来一直网上学习和借鉴一些开源的框架,再结合实际项目而整出来的这个开发框架;可能对于从事WPF开发的朋友来说有一定的借鉴意义。

完整的项目代码已经开源到github上面。在这个项目中,并不包含web api的项目。

  • 开源地址:https://github.com/jhrscom/jhrs

  • 官方博客:https://jhrs.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「offer来了」从基础到进阶原理,从vue2到vue3,48个知识点保姆级带你巩固vuejs知识体系

「面试专栏」前端面试之vuejs篇&#x1f5bc;️序言&#x1f399;️一、vue2.x基础知识预备&#x1f4fb;二、vue2.x基础知识常见面试题1、请说出vue.cli项目中src目录每个文件夹和文件的用法&#xff1f;2、vue.cli中怎样使用自定义的组件&#xff1f;有遇到过哪些问题&#x…

.NET Core 下使用 Apollo 配置中心

“Apollo&#xff08;阿波罗&#xff09;是携程框架部门研发的分布式配置中心&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的权限、流程治理等特性&#xff0c;适用于微服务配置管理场景。服务…

「offer来了」从基础配置到高级配置,16大知识点带你巩固webpack知识体系

「面试专栏」前端面试之Webpack篇&#x1f9e9;序言&#x1f3a8;一、基础知识学习&#x1f3b2;二、常见面试题汇总&#x1f3af;三、构建和打包1、前端代码如何进行构建和打包&#xff1f;2、前端为何要进行打包和构建&#xff1f;3、webpack原理&#x1f3b0;四、模块相关1、…

进击吧!Blazor!第一期回顾

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

《五分钟商学院》个人篇学习总结(下)

【商业知识】| 作者 / Edison Zhou这是EdisonTalk的第286篇原创内容商业篇聚焦的是我们与外部的关系&#xff0c;管理篇聚焦的是我们与内部的关系&#xff0c;而个人篇聚焦的则是我们与自己的关系。与自己斗&#xff0c;其乐无穷&#xff0c;本文是个人篇的下半部分学习总结。上…

「软件项目管理」软件项目范围计划——需求管理与任务分解

软件项目范围计划——需求管理与任务分解序言一、软件需求定义及层次1、定义2、层次二、软件需求管理过程1、管理过程2、需求获取3、需求分析4、需求规格编写5、需求验证6、需求变更&#xff08;1&#xff09;需求变更管理的主要工作&#xff08;2&#xff09;需求变更控制流程…

leetcode106. 从中序与后序遍历序列构造二叉树

一:题目 二:思路 例子:中序[9,3,15,20,7];后序[9,15,7,20,3] 1.我们先选取后续的最后的结点3&#xff08;其是根节点&#xff09; 2.我们在中序序列中用上一步求出的根节点3并记录其在中序数组中的位置rootin,然后我们就可以 求出 左子树的结点个数&#xff08;rootin - leftin…

「offer来了」快来关注这些性能优化问题

「面试专栏」前端面试之性能优化篇&#x1f4ac;序言&#x1f4af;思维导图抢先看&#x1f441;️‍&#x1f5e8;️一、html、css、js、jq优化1、针对HTML&#xff0c;如何优化性能&#xff1f;2、针对CSS&#xff0c;如何优化性能&#xff1f;3、哪些方法能提升移动端CSS3动画…

不宜过分炒作第三代半导体材料弯道超车

目前&#xff0c;本土晶圆大厂与台积电在技术水平上的差距是非常明显的。就市场份额来说&#xff0c;台积电的市场份额超过50%&#xff0c;而本土晶圆大厂的市场份额大约是台积电的十分之一。在技术水平上&#xff0c;本土晶圆大厂也和台积电这样的大厂有一定差距。目前台积电7…

「offer来了」浅谈前端面试中开发环境常考知识点

「面试专栏」前端面试之开发环境篇&#x1f331;序言&#x1f332;一、git1、为什么要使用git?2、常用的git命令3、git提交规范&#x1f333; 二、Chrome调试工具&#x1f334;三、抓包1、抓包工具2、抓包过程&#x1f33e;四、linux 常用命令1、为什么要用linux&#xff1f;2…

数据结构与算法专题——第十题 输入法跳不过的坎-伸展树

我们知道AVL树为了保持严格的平衡&#xff0c;所以在数据插入上会呈现过多的旋转&#xff0c;影响了插入和删除的性能&#xff0c;此时AVL的一个变种伸展树&#xff08;Splay&#xff09;就应运而生了&#xff0c;我们知道万事万物都遵循一个“八二原则“&#xff0c;也就是说8…

「软件项目管理」一文详解软件项目成本计划

软件项目成本计划序言一、成本估算的定义二、估算的基本概念1、关于估算2、软件项目规模3、软件规模单位4、软件项目成本5、成本单位6、软件规模和软件成本的关系7、成本估算结果三、成本估算过程1、估算输入2、估算处理3、估算输出四、成本估算方法1、代码行估算法&#xff08…

在腾讯云云函数计算上部署.NET Core 3.1

云厂商&#xff08;腾讯云、Azure等&#xff09;提供了Serverless服务&#xff0c;借助于Serverless&#xff0c;开发人员可以更加专注于代码的开发&#xff0c;减少运维的成本。腾讯云的函数计算提供了很多运行库&#xff0c;对.NET的支持需要通过custom runtime 来支持&#…

MassTransit Get Started-

MassTransit&#xff1a;是一款.NET的分布式应用程序框架&#xff08;开源、免费&#xff09;。通过MassTransit&#xff0c;可以轻松创建利用基于消息的、松耦合异步通信的应用程序和服务&#xff0c;以提高可用性&#xff0c;可靠性和可伸缩性。MassTransit本身定位轻量级的服…

「软件项目管理」成本估算模型——Walston-Felix模型和COCOMO Ⅱ模型

Walston-Felix模型和COCOMO Ⅱ模型序言一、Walston-Felix模型1. 公式2. 举例二、COCOMO模型&#xff08;Constructive Cost Model&#xff09;1. 模型定义2. COCOMO模型的发展3. COCOMO基本原理三、COCOMO 811. 模型级别2. 项目类型3. 基本COCOMO-81&#xff08;1&#xff09;公…

图书管理(SSM)

一:前言 这仅仅是个小demo,体验了一把SSM配置地狱&#xff0c;就简单的实现CRUD 二:相关技术 MybatisSpringSpringMVCMysqlMavenTomcat 三:功能展示 1:查询 2:增加 3:删除 4&#xff1a;修改 四:上码 1&#xff1a;导入依赖 <?xml version"1.0" encoding&…

ASP.NET Core Cookie SameSite

在较多的项目中&#xff0c;Cookie 是比较常用的一种状态保持的选择。比如常见的例子&#xff1a;用户登录成功后&#xff0c;服务器通过 set-cookie 将会话Id设置到当前域下&#xff0c;前端在调用后端接口时&#xff0c;会自动将同域下的 Cookie 携带上&#xff0c;然后后端接…

还不会ts?一文带你打开ts的大门

一文带你打开ts的大门序言一、什么是TypeScript&#xff1f;1、编程语言的类型2、TypeScript究竟是什么&#xff1f;二、为什么要学习TypeScript&#xff1f;1、程序更容易理解2、效率更高3、更少的错误4、非常好的包容性5、一点小缺点三、typescript入门1、如何安装TypeScript…

idea中右侧的Maven框消失了

我掉 芭比Q了 idea中右侧的maven框居然没了 消失不见了 跟一束烟似的 没了 解决&#xff08;网上找的&#xff09;

「软件项目管理」一文详解软件项目进度计划

软件项目进度计划序言一、进度及任务的定义1. 进度2. 任务3. 产品和任务的关系二、任务关联关系1. 定义2. 任务(活动)之间的关系3. 任务关系矩阵4. 任务关联关系的依据三、进度管理图示1. 甘特图2. 网络图&#xff08;1&#xff09;定义&#xff08;2&#xff09;常用的网络图Ⅰ…