主頁 > .NET開發 > 推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

2020-09-10 10:01:08 .NET開發

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

一個新學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的站長經常被筆者叨擾,先來說說我期望中的開發框架要實作哪些功能,

在開始搭建之前呢,還是晾一下最終的架構圖吧,

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

上圖就是折騰出來的一個框架,圖不美觀的話,大伙也就湊合著看吧,下圖是解決方案:

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架
  • 開源地址: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,

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

使用技術說明

  • 技術平臺:.Net 5.0
  • 技術框架:WPF + Prism+ AspectInjector + Refit
  • IoC組件:Prism自帶Prism.Unity
  • 資料序列化:Newtonsoft.Json,可替換
  • 日志記錄:系統自帶

解決方案詳解


解決方案從上到下依次為:

JHRS.Core(客戶端業務核心)

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

在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客戶端入口程式)

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

JHRS.Shell是WPF客戶端專案的入口程式,并且定義了整個系統公用的訊息提示框,模態視窗風格,主視窗等;登錄的入口也是在這里定義的,登錄系統后,可以自行實作權限功能加只加載對應的子模塊(子系統);在程式啟動時,會自動做一些初始化操作,掃描程式集自動注入相關功能,具體實作參見這里,

訊息提示框

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

訊息彈框

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

確認訊息框

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

模態視窗

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

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

遮罩層效果一般用于點擊按鈕,加載資料時使用,即呼叫介面到資料呈現中間有一個等待的程序,就可以顯示出來,因此在框架中通過AOP方式封裝了這么一個效果,呼叫時在相關的地方標記一個特性即可,先來看看效果,

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

該效果是直接從CSDN摳過來的,然后整到到代碼里面去的,純演示目的,

參考鏈接:https://blog.csdn.net/lhx527099095/article/details/8005095

modules解決方案檔案夾

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

在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(基礎類別庫)

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

基礎類別庫,可以任意擴展,該庫可以供其它所有庫參考,

JHRS.GenerateAPI(代碼生成工具)

該工具是在線決議swagger生成供Refit呼叫的介面,生成的介面如下:

推薦一個IT老鳥肝了2月有余的免費開源WPF企業級開發框架

呼叫介面的示例代碼如下:

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

本文markdown原文分享:https://dotnet9.com/2020-09-07

除非注明,文章均由 Dotnet9 整理發布,歡迎轉載,

轉載請注明:
作者:Dotnet9
鏈接:https://dotnet9.com/16199.html
來源:Dotnet9
著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請注明出處,

 

歡迎關注站長公眾號:Dotnet9

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/1751.html

標籤:WPF

上一篇:wpf之DataGrid系結DataTable,其中DataGridComboBoxColumn雙向系結列舉enum

下一篇:解決 WPF 系結集合后資料變動界面卻不更新的問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more