<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>

          推薦一個(gè)IT老鳥(niǎo)肝了2月有余的免費(fèi)開(kāi)源WPF企業(yè)級(jí)開(kāi)發(fā)框架

          共 4209字,需瀏覽 9分鐘

           ·

          2020-09-10 08:12

          JHRS

          一個(gè)新學(xué)WPF的IT老鳥(niǎo),肝了2個(gè)月做了這么一個(gè)WPF企業(yè)級(jí)開(kāi)發(fā)框架,站長(zhǎng)clone學(xué)習(xí),覺(jué)得甚是不錯(cuò)。這是一個(gè)使用了Prism搭建的插件式框架,封裝了DataGrid的使用,使整個(gè)框架子模塊簡(jiǎn)單易學(xué)、易擴(kuò)展,特別是作者還寫(xiě)了一個(gè)系列博客教程,值得點(diǎn)贊。


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


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

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

          WPF企業(yè)級(jí)開(kāi)發(fā)框架搭建系列文章導(dǎo)航


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

          WPF管理系統(tǒng)開(kāi)發(fā)框架設(shè)計(jì)圖


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

          在開(kāi)始搭建之前呢,還是晾一下最終的架構(gòu)圖吧。

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

          上圖就是折騰出來(lái)的一個(gè)框架,圖不美觀(guān)的話(huà),大伙也就湊合著看吧。下圖是解決方案:

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

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


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

          在搭建這個(gè)框架時(shí),是基于最新的?【 .net 5】用的技術(shù)版本是比較新的,演示代碼中,wpf也是使用 .net 5。

          采用.NET 5開(kāi)發(fā)

          使用技術(shù)說(shuō)明

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

          解決方案詳解


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

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

          客戶(hù)端業(yè)務(wù)核心

          在JHRS.Core這個(gè)庫(kù)里面,各個(gè)目錄功能說(shuō)明如下:

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

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

          WPF客戶(hù)端入口程序

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

          消息提示框

          消息提示框

          消息彈框

          消息彈框

          確認(rèn)消息框

          確認(rèn)消息框

          模態(tài)窗口

          模態(tài)窗口

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

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

          遮罩層效果

          該效果是直接從CSDN摳過(guò)來(lái)的,然后整到到代碼里面去的,純演示目的。

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

          modules解決方案文件夾

          modules解決方案文件夾

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

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

          目錄組織原則

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

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

          JHRS(基礎(chǔ)類(lèi)庫(kù))

          JHRS(基礎(chǔ)類(lèi)庫(kù))

          基礎(chǔ)類(lèi)庫(kù),可以任意擴(kuò)展,該庫(kù)可以供其它所有庫(kù)引用。

          JHRS.GenerateAPI(代碼生成工具)

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

          接口

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

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

          最后


          對(duì)于WPF開(kāi)發(fā)來(lái)說(shuō),我并不是很熟悉,這段時(shí)間以來(lái)一直網(wǎng)上學(xué)習(xí)和借鑒一些開(kāi)源的框架,再結(jié)合實(shí)際項(xiàng)目而整出來(lái)的這個(gè)開(kāi)發(fā)框架;可能對(duì)于從事WPF開(kāi)發(fā)的朋友來(lái)說(shuō)有一定的借鑒意義。

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

          • 開(kāi)源地址:https://github.com/jhrscom/jhrs
          • 官方博客:https://jhrs.com

          往期精彩回顧




          【推薦】.NET Core開(kāi)發(fā)實(shí)戰(zhàn)視頻課程?★★★

          .NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門(mén)篇-開(kāi)篇及總體規(guī)劃

          【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開(kāi)篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀(guān)看指南)

          .NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴(lài)注入與動(dòng)態(tài)選擇看這篇就夠了

          10個(gè)小技巧助您寫(xiě)出高性能的ASP.NET Core代碼

          用abp vNext快速開(kāi)發(fā)Quartz.NET定時(shí)任務(wù)管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度

          現(xiàn)身說(shuō)法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢(xún)優(yōu)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點(diǎn)建議

          C#異步編程看這篇就夠了

          給我好看

          您看此文用

          ??·?

          秒,轉(zhuǎn)發(fā)只需1秒呦~

          好看你就

          點(diǎn)點(diǎn)


          瀏覽 56
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  网站自拍视频网站在线看 | 天堂网在线最新香蕉视频 | 韩国一区二区三区在线观看 | 色欲在线| 曰韩欧美一级 |