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

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

一個新學WPF的IT老鳥,肝了2個月作了這麼一個WPF企業級開發框架,站長clone學習,以爲甚是不錯。這是一個使用了Prism搭建的插件式框架,封裝了DataGrid的使用,使整個框架子模塊簡單易學、易擴展,特別是做者還寫了一個系列博客教程,值得點贊。html


下面是做者博文系列首篇:WPF企業級開發框架搭建指南(啓示錄),2020從入門到放棄git


這個系列的文章旨在記錄工做中使用WPF開發新的醫療項目中,有感於必須統一掉一些規範上的事情,而且提升團隊開發效率,遂折騰了這麼一個半吊子的框架,這個標題WPF企業級開發框架搭建指南,2020從入門到放棄可能會唬住一些人,但看到這些零碎文字的朋友就湊和着看吧,若是能幫助到你,那也榮幸了。github

WPF技術是一個很不錯的技術,但一直沒有上手過正式的項目,趁在作這個醫療項目時,遂搭建一個WPF開發框架,目的是爲了統一WPF開發並提升開發效率;我對WPF技術算是零基礎,現學現賣,用這些不成體系的文字予以記錄一些想法和實踐。web

文章目錄shell

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的站長常常被筆者叨擾。先來講說我指望中的開發框架要實現哪些功能。api

在開始搭建以前呢,仍是晾一下最終的架構圖吧。服務器

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

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

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

開發環境


由於項目是使用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的項目。

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

除非註明,文章均由 Dotnet9 整理髮布,歡迎轉載。

轉載請註明:
做者:Dotnet9
連接:https://dotnet9.com/16199.html
來源:Dotnet9
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

 

歡迎關注站長公衆號:Dotnet9

相關文章
相關標籤/搜索