一個新學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的站長經常被筆者叨擾,先來說說我期望中的開發框架要實作哪些功能,
在開始搭建之前呢,還是晾一下最終的架構圖吧,
上圖就是折騰出來的一個框架,圖不美觀的話,大伙也就湊合著看吧,下圖是解決方案:
- 開源地址: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.0
- 技術框架:WPF + Prism+ AspectInjector + Refit
- IoC組件: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.Shell(WPF客戶端入口程式)
JHRS.Shell是WPF客戶端專案的入口程式,并且定義了整個系統公用的訊息提示框,模態視窗風格,主視窗等;登錄的入口也是在這里定義的,登錄系統后,可以自行實作權限功能加只加載對應的子模塊(子系統);在程式啟動時,會自動做一些初始化操作,掃描程式集自動注入相關功能,具體實作參見這里,
訊息提示框
訊息彈框
確認訊息框
模態視窗
遮罩層效果(蒙層效果或Loading效果)
遮罩層效果一般用于點擊按鈕,加載資料時使用,即呼叫介面到資料呈現中間有一個等待的程序,就可以顯示出來,因此在框架中通過AOP方式封裝了這么一個效果,呼叫時在相關的地方標記一個特性即可,先來看看效果,
該效果是直接從CSDN摳過來的,然后整到到代碼里面去的,純演示目的,
參考鏈接:https://blog.csdn.net/lhx527099095/article/details/8005095
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.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
本文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
