如何基於Winform開發框架或混合框架基礎上進行項目的快速開發

来源:https://www.cnblogs.com/wuhuacong/archive/2018/11/28/10030660.html
-Advertisement-
Play Games

在開發項目的時候,我們為了提高速度和質量,往往不是白手起家,需要基於一定的基礎上進行項目的快速開發,這樣可以利用整個框架的生態基礎模塊,以及成熟統一的開發方式,可以極大提高我們開發的效率。本篇隨筆就是介紹基於Winform開發框架或混合框架基礎上進行項目的快速開發,這個主題在之前的一些隨筆有一定的介... ...


在開發項目的時候,我們為了提高速度和質量,往往不是白手起家,需要基於一定的基礎上進行項目的快速開發,這樣可以利用整個框架的生態基礎模塊,以及成熟統一的開發方式,可以極大提高我們開發的效率。本篇隨筆就是介紹基於Winform開發框架或混合框架基礎上進行項目的快速開發,這個主題在之前的一些隨筆有一定的介紹,但是覺得都不是很全面、完整,因此本篇隨筆通過一些簡單的例子以及一個具體的項目案例來進行全流程的開發出來,希望讀者對基於我們開發框架的開發模式有一個更深入的瞭解。

1、基於框架開發簡單界面的過程

由於我們框架提供了很多基礎的模塊來給我們新業務開發提供便利,如公用類庫、分頁控制項、字典管理、許可權管理系統、自動升級、附件管理、人員管理、工作流管理等可以反覆重用的模塊。

有了這些模塊的加持,我們開發項目很多基礎的處理就不用所有的東西都從頭來過。

對於一個新建的業務表,我們需要開發的需要底層的實現和界面層的展示,這些工作量也是非常巨大的,如果基於控制項細粒度的處理,也是非常繁瑣的工作,因此基於這些開發過程的考慮,我們引入了提高效率開發的代碼生成工具Database2Sharp,專門為我們基於開發框架基礎上的框架實現代碼開發,和業務界面展示的快速開發。

代碼生成工具,不僅能夠讓它生成我們常規開發的界面層以下的實現代碼(包括BLL、DAL、Entity、IDAL等層,以及混合框架的WCF、Web API的實現層和調用封裝層),以及界面層的調用代碼。

有了這些的處理,我們可極大減輕工作量。

我們開發新業務表的處理沒有發生變化,需要設計好自己的業務表,然後利用代碼生成工具生成對應代碼,最後合併到項目裡面並調整界面為合適的展示方式。

我在之前的隨筆《循序漸進開發WinForm項目(3)--Winform界面層的項目設計》裡面簡單的介紹了一般簡單界面的處理過程。

我們首先需要使用PowerDesigner或者同類工具進行表的建模,如下所示。

然後使用代碼生成工具生成框架代碼,如Winform框架生成下麵項目框架代碼。

這個分層,在Web項目或者WInform項目(包括WPF項目)這些分層都是可以重用的,這樣我們就不用重覆處理界面一下的邏輯,針對性的開發我們需要的界面層即可。

DAL層根據不同的需要,擴展支持不同的資料庫類型,每個資料庫類型,對應一個資料庫訪問實現層即可,它們實現IDAL層的介面,稱之為資料庫訪問介面實現層。

然後接著在代碼生成工具中單擊“Windows界面代碼生成”後,生成的窗體界面文件如下所示,分為了兩個部分,一個是列表界面,一個是數據編輯界面。

然後把相關的界面內容複製到剛纔創建的空項目工程上,最後界面層的項目截圖如下所示。

 生成的界面打開就具有了常規的列表和數據編輯展示的界面,如下所示。

列表界麵包括了查詢、新建、導入、導出,以及分頁控制項的整合處理,分頁控制項裡面整合支持了各種右鍵操作,包括增加、編輯、刪除,以及各種調整設置功能。

搞定列表界面,下麵我們再來看看數據的編輯界面部分,數據編輯界面生成的效果如下所示(由於版面的原因,我把它進行了一定的縮小)。

我們看到,裡面的欄位說明,控制項的名稱等內容,都已經合理安排好了,基本上設計資料庫的時候,指定的欄位備註就能正確生成出來了。

這裡演示的表欄位比較少,因此可能排版佈局方面沒有很好的演示效果,不過我們知道DevExpress本身的LayoutControl佈局很強大,我們可以隨意調整裡面控制項的位置。

對於控制項的類型,也可以進行不同類型的轉換,如可以吧文本類型,轉換為數值類型的輸入控制項等等。

 如果對於複雜的界面,我們需要進行一定的合併拖動處理,以實現我們所需要的界面效果,如下所示。

 對於界面層大量的處理操作,我們後臺的代碼基本上不需要調整,從而減少我們出錯和降低效率的問題。

以上就是我們在做一個簡單界面的過程中,一些開發思路過程。

2、實際的項目開發過程

以上介紹過程中,基本上設計到了核心的開發流程了,而我們實際的項目開發過程中,可能還需要涉及到更細節的一些過程。

1)基礎項目的生成

首先我們可能需要很多欄位在一個表裡面,需要設計到很多業務表,那麼也就是工作量的問題,和前面不會有本質的差異。

不管我們業務中涉及有多少個表,只要我們定義好表和它的備註信息,一切後面處理起來都會是那麼的愜意的了。

生成的項目中,我們已經有了對應框架支持的實現層了。

而界面層,我們可以考慮使用框架基於插件模式的動態載入配置菜單的啟動模塊項目,如下所示。

對於Winform的界面項目,我們一般建議將我們的業務獨立一個整體的項目,並包含所需要的引用文件,這個在利用代碼生成工具生成代碼的時候,就會有一個空白的UI項目可供使用的。

如對於普通的WInform項目,可以看到它的項目效果大概如下所示。

我們這裡實際的項目使用混合框架進行處理的,因此界面的內容比這個複雜一點,不過也是一個獨立的界面項目。

我們看到整個UI的界面部分是放在了Client目錄下麵,我在下麵進行了分門別類的放置一些目錄,區分不同的界面部分,方便尋找和處理的。

其他的Core層則是使用引用現有文件路徑的方式進行包含文件,目的是減少DLL的依賴。

對於混合框架部分,我們這裡需要多闡述一些項目,包括Web API的項目(或者WCF的項目),以及對Web API的調用封裝處理。

Web API項目我們可以從框架案例中把基礎的Web API項目拷貝過來使用,然後增加自己業務的Web API控制器就可以了。

對於新增業務表的Web API控制器代碼,也可以利用代碼生成工具進行生成。

生成後的控制器代碼,我們整合到主體的Web API項目中就可以使用了(對於WCF項目,一樣的方式,不在贅述)。

控制器裡面,基本上就是封裝對常規BLL層的調用,不過Web API的介面都需要token參數,或者一些特殊的介面需要簽名信息(如登陸的介面等)

關於Web API的封裝調用介紹,這裡不准備詳細進行介紹,有興趣可以瞭解下我的其他隨筆《Web API應用架構在Winform混合框架中的應用(3)--Winfrom界面調用WebAPI的過程分解》、《Web API應用架構在Winform混合框架中的應用(4)--利用代碼生成工具快速開發整套應用》、《Web API應用架構設計分析(1)》、《Web API應用架構設計分析(2)》、《Web API介面設計經驗總結》、《Winform混合式開發框架訪問Web API介面的處理》、《Web API項目中使用Area對業務進行分類管理》,還是蠻多的,呵呵。

原則上,我們有了啟動界面項目WHC.Framework.StarterDx2,有了基於插件模塊界面項目的WHC.HospitalDeptMis.ClientDx,以及一些框架的支持模塊,那麼我們就基本上可以跑起來了。

如果編譯沒問題,順利的話,我們登陸後可以看到界面如下所示。

我們沒有看到任何業務的菜單,那些在頂端的系統管理菜單是固定的菜單項,我們應該如何才能顯示我們需要的菜單項呢?

2)菜單配置

我們根據我們實際的需要,創建業務界面的菜單,我們在許可權管理系統的菜單管理界面裡面,新建我們的菜單信息。

上面的WInform窗體類型,就是用於定位我們的窗體對象類的,前面部分為類的全名,後者為DLL的文件名稱,中間用逗號分隔。

一般菜單最好分為三層,便於區分展示,如下界面所示

 

 定義好菜單後,我們需要為對應的角色分配對應的菜單資源,這樣用戶登錄系統後才能看到對應的菜單,如下是角色分配菜單的界面。

登錄系統界面,可以看到菜單信息的展示了。

 

 3)許可權的配置

前面介紹了菜單的創建和配置,其中角色包含菜單資源也可以看做是菜單許可權的配置,不過我們知道,系統還是有很多功能操作需要進行控制的,如新增、編輯、刪除,導出、導入等,這些是如何實現許可權的控制的呢?

這些依然是在許可權系統裡面進行控制管理的,首先我們需要定義需要控制的功能點,如下界面所示,可以批量錄入某個業務的相關處理操作。

最後我們可以看到展開的功能點

定義好這些功能點後,我們可以為對應的角色分配對應的功能點許可權,和前面的菜單許可權分配類似。

做完這些,剩下最後一步就是需要在界面中綁定許可權控制邏輯,我們來看看列表界面和詳細界面如何進行控制的。

列表界面的許可權控制處理如下:

 編輯詳細界面許可權控制處理如下所示。

 

有了界面模塊的許可權通用處理,以及許可權管理系統的信息配置,那麼整個系統跑起來就能夠實現我們對菜單的控制,以及對系列度的功能點進行控制處理的了。

這個是在實際開發過程中,我們需要註意的處理步驟。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 因為工作需要,要把PDF的64字元串轉換為圖片的base64保存到資料庫,但是看了看國內外,一方面是做這個的比較少,還有就是做這個真的很煩. PDF轉圖片呢,大概的實現思路方式一般有兩種,一種就是重繪,類似於畫畫,把看到的畫到新的畫布上;第二種呢,就會識別裡面的內容複製到新的畫布上,我也不知道我比喻 ...
  • 找了好久,一直沒找到可用的熱力圖heatmap.js。 應該說,使用01中的語法一直都無法實現熱力圖。只能說我太菜了。。。 現在急於求成,我找了另一種語法來調用ECharts。此種語法的js文件集是從碼雲上下載下來的。GitHub也有一樣的 https://gitee.com/echarts/ech ...
  • GitHub設置使用SSH Key的好處就是可以使用SSH連接,並且提交代碼的時候可以不用輸入密碼,免密提交。SSH Key 我們使用PuTTYgen來生成公鑰(Public Key),私鑰(Private Key)和PuttyKey。在使用PuTTYgen之前,你需要先安裝TortoiseGit ...
  • 一 開發概述 對於具有一定規模的大多數企業來說,存在著這樣一種需求:存在某個或某些任務,需要系統定期,自動地執行,然而,對大多數企業來說,該技術的實現,卻是他們面臨的一大難點和挑戰。 對於大部分企業來說,實現如上功能,挑戰在哪裡? 挑戰一:如何做一個自動服務的系統? 是從0到1開發(費時費力花錢,還 ...
  • 這是我第一次發表博客。以前經常到博客園查找相關技術和代碼,今天在寫一段小程式時出現了問題, 但在網上沒能找到理想的解決方法。故註冊了博客園,想與新手分享(因為本人也不是什麼高手)。 vb.net和C#操作Oracle資料庫已經用了N多年了。由於是做工程自動化項目的,業主只對軟體的功能和 界面是否友好 ...
  • " 【.NET Core項目實戰 統一認證平臺】開篇及目錄索引 " 上篇文章我介紹瞭如何在網關上實現客戶端自定義限流功能,基本完成了關於網關的一些自定義擴展需求,後面幾篇將介紹基於 的認證相關知識,在具體介紹 實現我們統一認證的相關功能前,我們首先需要分析下 源碼,便於我們徹底掌握認證的原理以及後續 ...
  • 編輯文檔時,對一些需要修改的字元或段落可以通過查找替換的方式,快速地更改。在C# 在word中查找及替換文本一文中,主要介紹了在Word中以文本替換文本的方法,在本篇文章中,將介紹如何用一篇Word文檔、圖片或者表格來替換文檔中的指定文本字元串。示例要點如下: 1. 用文檔替換Word中的文本 2. ...
  • .NET、C#和ASP.NET三者之間的區別如下: 一、什麼是.NET?.NET是微軟公司下的一個開發平臺,.NET核心就是.NET Framwork(.NET框架)是.NET程式開發和運行的環境,在這個平臺下可以用不同的語言進行開發,因為.NET是跨語言的一個平臺。語言可以是C#,f#,j#,vb ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...