<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 5597字,需瀏覽 12分鐘

           ·

          2020-09-09 23:37

          JHRS

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


          下面是作者博文系列首篇:WPF企業(yè)級開發(fā)框架搭建指南(啟示錄),2020從入門到放棄


          這個系列的文章旨在記錄工作中使用WPF開發(fā)新的醫(yī)療項目中,有感于必須統(tǒng)一掉一些規(guī)范上的事情,并且提高團隊開發(fā)效率,遂折騰了這么一個半吊子的框架,這個標題WPF企業(yè)級開發(fā)框架搭建指南,2020從入門到放棄可能會唬住一些人,但看到這些零碎文字的朋友就湊和著看吧,如果能幫助到你,那也榮幸了。

          WPF技術是一個很不錯的技術,但一直沒有上手過正式的項目,趁在做這個醫(yī)療項目時,遂搭建一個WPF開發(fā)框架,目的是為了統(tǒng)一WPF開發(fā)并提高開發(fā)效率;我對WPF技術算是零基礎,現(xiàn)學現(xiàn)賣,用這些不成體系的文字予以記錄一些想法和實踐。

          WPF企業(yè)級開發(fā)框架搭建系列文章導航


          1. WPF企業(yè)級開發(fā)框架搭建指南(啟示錄)
          2. JHRS開發(fā)框架之基礎類庫
          3. JHRS開發(fā)框架之第三方框架選型
          4. JHRS開發(fā)框架之WPF調(diào)用Web API封裝
          5. JHRS開發(fā)框架之客戶端入口項目
          6. JHRS開發(fā)框架之各子系統(tǒng)如何整合
          7. JHRS開發(fā)框架之怎樣設計合理的ViewModel基類
          8. JHRS開發(fā)框架之公用組件用戶控件的封裝
          9. JHRS開發(fā)框架之建議遵循的一些建目錄文件原則
          10. JHRS開發(fā)框架之WPF數(shù)據(jù)驗證
          11. JHRS開發(fā)框架之ViewModel相互傳參和彈框回傳參的解決辦法
          12. JHRS開發(fā)框架之踩坑記(終章)

          WPF管理系統(tǒng)開發(fā)框架設計圖


          在正式開始WPF開發(fā)框架搭建之前,做了一些技術選型和在群里面咨詢了下對WPF技術比較了解的群友,當中就屬dotnet9.com的站長經(jīng)常被筆者叨擾。先來說說我期望中的開發(fā)框架要實現(xiàn)哪些功能。

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

          WPF基于WEB API開發(fā)管理系統(tǒng)框架

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

          框架解決方案
          • 開源地址:https://github.com/jhrscom/jhrs
          • 官方博客:https://jhrs.com
          • 用到插件:https://marketplace.visualstudio.com/items?itemName=PeterSpa.XamlBinding

          開發(fā)環(huán)境


          因為項目是使用WPF來開發(fā)的,自然基于【MVVM】的理念搭建了這么一個快速開發(fā)框架,適用于開發(fā)【傳統(tǒng)類型的管理系統(tǒng)】,并通過調(diào)用web api的方式來完成所有的業(yè)務操作,在WPF的Page,窗體(Window),用戶控件的后置代碼,幾乎不會有任何的業(yè)務代碼,除了一些控制界面行為的功能。

          在搭建這個框架時,是基于最新的 【 .net 5】用的技術版本是比較新的,演示代碼中,wpf也是使用 .net 5

          采用.NET 5開發(fā)

          使用技術說明

          • 技術平臺:.Net 5.0
          • 技術框架:WPF + Prism+ AspectInjector + Refit
          • IoC組件:Prism自帶Prism.Unity
          • 數(shù)據(jù)序列化:Newtonsoft.Json,可替換
          • 日志記錄:系統(tǒng)自帶

          解決方案詳解


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

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

          客戶端業(yè)務核心

          在JHRS.Core這個庫里面,各個目錄功能說明如下:

          1. Aop:實現(xiàn)了一個點擊按鈕顯示轉圈圈效果的類,一般用于加載數(shù)據(jù),點擊按鈕從服務器獲取數(shù)據(jù)讓用戶等侯片刻。
          2. Apis:保存著代碼生成工具【JHRS.GenerateAPI】自動生成的接口,該工具可以在線解析swagger生成供調(diào)用的接口,參見這里(使用該工具需要設置swagger地址,另外有bug的話,自己修改下就可以了)。
          3. Controls:定義了WPF界面使用的公用控件(保存在Controls目錄),如通用表格(DataGrid),下拉框等,凡公用的控件,都可以保存在此目錄。
          4. Enums:公用的枚舉,各個模塊可以引用。
          5. Events:事件類,Prism自帶事件總線,相應的事件類在這個目錄創(chuàng)建,具體應用參見這里。
          6. Extensions:擴展類
          7. Identity:身份認證,即登錄系統(tǒng)后,從服務器端獲取到的身份認證會話信息(用戶,token等)。
          8. Models:各個模塊的DTO對象,一般是根據(jù)swagger解析出各個接口的實體對象(輸入,輸出DTO)。
          9. Modules:模塊的輔助類。
          10. ViewModels:這個目錄里面定義了ViewModel的基類,處理各個功能Page業(yè)務的ViewModel類,需要從這里繼承對應的類,如管理頁面繼承BaseManagePageViewModel,而新增編輯頁面繼承BaseDialogPageViewModel類等。并且在基類里面定義了公共方法,如消息提示框,消息彈框,打開模態(tài)窗口等,效果見下方所示。

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

          WPF客戶端入口程序

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

          消息提示框

          消息提示框

          消息彈框

          消息彈框

          確認消息框

          確認消息框

          模態(tài)窗口

          模態(tài)窗口

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

          遮罩層效果一般用于點擊按鈕,加載數(shù)據(jù)時使用,即調(diào)用接口到數(shù)據(jù)呈現(xiàn)中間有一個等待的過程,就可以顯示出來,因此在框架中通過AOP方式封裝了這么一個效果,調(diào)用時在相關的地方標記一個特性即可。先來看看效果。

          遮罩層效果

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

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

          modules解決方案文件夾

          modules解決方案文件夾

          在modules這個解決方案文件夾里面的是各個子模塊,也就是各個子系統(tǒng),例如【JHRS.OutpatientSystem】是WPF項目的子系統(tǒng)之一(門診模塊);在各子系統(tǒng)中,最外層擁有一個Module的類(OutpatientSystemModule),需要實現(xiàn)IModule接口供Prism自動掃描注冊到容器里面。

          在子模塊中,目錄的組織原則如下。

          目錄組織原則

          |----- JHRS.OutpatientSystem 命名規(guī)則:【JHRS】點【模塊名稱】|----- Controls 表示當前模塊的控件庫存放目錄|     |------- Manager 子目錄|     |------- SysManager 子目錄|     |--------其它子目錄|------ Extensions 當前模塊擴展類|------ Model 當前模塊實體,如查詢條件實體|------ ViewModels 【固定命名,不能改動】|    |------ScheduManager 各管理功能目錄|    |--------XXXXViewModel.cs 每個功能頁面的ViewModel類|    |--------其它ViewModel.cs 其它頁面的ViewModel|-------Views 【W(wǎng)PF頁面,固定命名】|    |------ ScheduManager 功能目錄|    |------XXXXXXX.xaml WPF頁面|    |------XXXXXXX.xaml WPF頁面|    |-------SysManager 功能目錄|------- OutpatientSystemModule 命名:模塊名稱+Module

          在每一個子系統(tǒng)中,最外層的一個模塊類,名稱規(guī)則為:【模塊名稱+Module】,編寫這個類是為了使用Prism加載這個模塊。

          JHRS(基礎類庫)

          JHRS(基礎類庫)

          基礎類庫,可以任意擴展,該庫可以供其它所有庫引用。

          JHRS.GenerateAPI(代碼生成工具)

          該工具是在線解析swagger生成供Refit調(diào)用的接口,生成的接口如下:

          接口

          調(diào)用接口的示例代碼如下:

          
              
          var response = await RestService.For
                  
                   (baseUrl).Login(CurrentUser);
                  if (!response.Succeeded){         Alert(response.Message);         return;}

          最后


          對于WPF開發(fā)來說,我并不是很熟悉,這段時間以來一直網(wǎng)上學習和借鑒一些開源的框架,再結合實際項目而整出來的這個開發(fā)框架;可能對于從事WPF開發(fā)的朋友來說有一定的借鑒意義。

          完整的項目代碼已經(jīng)開源到github上面。在這個項目中,并不包含web api的項目。

          • 開源地址:https://github.com/jhrscom/jhrs
          • 官方博客:https://jhrs.com
          回復 【關閉】
          回復 【實戰(zhàn)】獲取20套實戰(zhàn)源碼
          回復 【被刪】
          回復 【訪客】
          回復 【python】學微獲取全套0基礎Python知識手冊
          回復 【2019】獲取2019 .NET 開發(fā)者峰會資料PPT
          回復 【加群】加入dotnet微信交流群

          臥槽:原來7-zip才是解壓縮軟件中的業(yè)界良心!


          .NET Core中GC的工作原理


          瀏覽 28
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美少妇坐爱视频 | 欧美黄色免费观看 | 日本一二三区视频在线 | 操逼二区| 国产一区二区精品在线 |