Winform開發中的困境及解決方案

来源:https://www.cnblogs.com/wuhuacong/archive/2020/07/24/13370453.html
-Advertisement-
Play Games

在我們開發各種應用的時候,都會碰到很多不同的問題,這些問題涉及架構、模塊組合、界面處理、共同部分抽象等方面,我們這裡以Winform開發為例,從系統模塊化、界面組件選擇、業務模塊場景劃分、界面基類和輔助類處理、代碼生成工具輔助開發等方面介紹在實際項目開發過程中碰到的困境和相關的解決方案,以便分析其中... ...


在我們開發各種應用的時候,都會碰到很多不同的問題,這些問題涉及架構、模塊組合、界面處理、共同部分抽象等方面,我們這裡以Winform開發為例,從系統模塊化、界面組件選擇、業務模塊場景劃分、界面基類和輔助類處理、代碼生成工具輔助開發等方面介紹在實際項目開發過程中碰到的困境和相關的解決方案,以便分析其中是如何逐步提高效率和整體用戶體驗的。

1、系統模塊化

軟體和建築工程很類似,都是需要構建一個龐大而功能完整的一個系統,而工程化也意味著需要多人協作,那麼就需要把一個龐大的系統橫向或者縱向劃分為各個可以獨立施工完成的模塊,雖然各個模塊之間有所銜接或者交互,但是基本上可以以模塊化的方式來構建,這個也是工程化開發的精髓所在。

以一個軟體管理系統為例,我們儘可能把精力焦點放在客戶的業務需求上,而對於常規的如許可權控制、字典管理等一些常用的內容,由於它們的處理邏輯在特定領域上基本上比較固定一些,可以儘可能獨立並重覆使用,

而有時候,以某個特定的業務來說,同時很多處理規則也是不變的,因此也可以以業務模塊的方式來劃分,從而類似通用模塊的方式重覆使用。

模塊化類似小孩子搭積木的方式構建一個所要的形狀,雖然軟體和建築在這方面肯定更加複雜化,但是模塊化系統是大勢所趨,也是簡化開發、易於維護、提高系統健壯性的重要舉措。

 

2、界面組件選擇

在Winform內置的傳統樣式裡面,雖然提供了很多很好的界面組件,不過整體效果還是比較古板。為了增強界面的處理效果,我們一般使用一些第三方的界面套件作為Winform開發的基礎,這個除了可以提高整體界面的效果外,還在很多控制項層面提供豐富的處理和響應。

以前嘗試過各種類型的界面套件,最終還是對DevExpress情有獨鍾,不僅僅是因為它是大軟體公司開發的界面套件,也是因為它在界面層次提供了很多豐富的界面組件和強大的屬性設置,能夠極大滿足各種界面複雜的要求。

使用DevExpress界面套件,可以使得我們開發的界面更加漂亮,用戶體驗也更好。

 

或者類似效果

 

3、業務模塊的場景劃分

前面說過,一個系統為了簡化開發、易於維護、提高系統健壯性的可以把它按功能方式劃分為各個獨立模塊進行開發或者重用,而對於業務模塊來說,我們也還可以進一步細分。

一般系統界面中,大多數標準方式是展示業務數據的查詢列表,然後在根據需要對特定記錄進行編輯、查看、刪除等操作。

我們把常規的列表界面,新增、編輯、查看、導入等界面放在一起,除了列表頁面,其他內容以彈出層對話框的方式進行處理,如下界面示意所示。

如對於列表內容的展示,一般展示效果如下所示,主要展示資料庫裡面的二維表信息。

除了列表界面,另外一個就是對數據的明細展示界面了,這個界面內容可以更加多元化,如在裡面承載各種控制項,如文本、日期、圖片、下拉列表、樹形列表,以及我們自定義的一些控制項,如對於附件的通過管理展示控制項。

 

 有了這些標準的展示效果,我們就可以參照這些,使用代碼生成工具輔助頁面內容的生成的了,生成規則以資料庫元數據為參考即可。

 

4、界面基類和輔助類的處理

我們以常規業務模塊界面來分析,主要有明細查看或編輯界面、列表界面,那麼這些界面為了方便使用,我們可以抽象一部分界面處理邏輯或者共有部分內容,放在界面基類BaseEdit或者BaseDock等基類裡面,如下界面所示。

儘可能把一些涉及到業務數據的處理通用規則放到基類,而變化部分則在子類進行處理即可。這樣可以簡化生成界面的代碼,以及提高可重用率,減少維護的難度和代碼臃腫。 

對於一般的業務系統,可能都會涉及到不同資料庫的使用,如SQLServer、Oracle、Mysql、PostgreSQL等資料庫,那麼這部分,可以通過使用微軟企業庫或者其他ORM方式進行處理,以實現系統對多種資料庫的良好支持。

 

5、代碼生成工具輔助開發

通過上面的介紹,通用部分作為模塊獨立使用,業務模塊的界面主要劃分列表和編輯查看界面兩部分,而各自又進行了一定的基類抽象處理,那麼相對來說已經簡化很多了,不過對於業務數據來說,我們還是需要做很多重覆性的工作,如界面顯示、界面賦值及調用介面處理等操作,這些對業務對象固定的話,其實也是規則類似的,那麼這部分我們結合代碼生成工具進行批量生成即可,生成後進行一定的微調,可以極大降低出錯的幾率,減少代碼的編寫量。

 在我們開發軟體的時候,解決方案項目基於一定的分層組織,每個項目分層中,各個類的關係也是確定的,藉助輔助工具(結合模板引擎)可以快速生成我們所需要的代碼,並極大提高我們軟體的開發效率,Database2Sharp代碼生成工具就是一款專門針對我們自己框架結構配套的開發工具。

Database2Sharp代碼生成工具,主要是基於資料庫提取的元數據信息,根據表的信息和關係,欄位信息等內容,生成我們框架所需要分層的類代碼。

對於Winform開發,可以根據Winform框架或者混合框架的窗體界面類,生成標準的界面代碼,列表界面預設具有分頁查詢、導入導出、高級查詢、編輯、刪除事件綁定,編輯界面則具有獲取數據並顯示在控制項,保存後執行更新或者寫入的操作。

 

 

 

7、其他

除了前面介紹的部分外,一般大的方面,我們還可以以業務方式做一些獨立的組件模塊,以方便重覆使用,這個是大的方面。

模塊化,一般需要構建好對應的框架架構,每個獨立的模塊,都是遵循統一的框架架構方式處理,可以極大提高代碼的開發效率和降低維護的難度。

Winform開發架構如下所示。

 而對於混合方式的Winform開發,那麼還設計Web API模塊的部署,以及客戶端對Web API調用的封裝,如下所示。

 小的方面,還可以進一步劃分一些常用的界面處理元素,如自定義控制項的方式進行特殊組件的開發工作。如隨筆《在Winform界面使用自定義用戶控制項及TabelPanel和StackPanel佈局控制項》、《在Winform系統界面中對進展階段的動態展示和處理》。

 


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

-Advertisement-
Play Games
更多相關文章
  • 本篇要學習的內容和知識結構概覽 函數的參數及其傳遞方式 1. 函數參數傳遞方式 傳值: 傳變數值: 將實參記憶體中的內容拷貝一份給形參, 兩者是不同的兩塊記憶體 傳地址值: 將實參所對應的記憶體空間的地址值給形參, 形參是一個指針, 指向實參所對應的記憶體空間 傳引用: 形參是對實參的引用, 形參和實參是同 ...
  • K近鄰演算法(KNN,K-NearestNeighbor)是機器學習或數據分析中最基礎、也是最簡單的演算法之一,這個演算法的思路就如同它字面上的意思“K個最近的鄰居”,想要得到某個樣本的某個特征的值(一個樣本通常有多個特征),就需要找到距離它最近的K個樣本,然後根據這些樣本的該特征的近似值作為它的特征值。 ...
  • 百度雲盤:Python入門經典以解決計算問題為導向的Python編程實踐PDF高清完整版免費下載 提取碼:6e8d 內容簡介 《Python入門經典:以解決計算問題為導向的Python編程實踐》是一本系統而科學的Python入門教程,美國密歇根州立大學等多所美國知名高校採用其作為編程語言的入門教材, ...
  • 大量使用的對象,重覆的創建和銷毀,很耗費性能,這個時候就要使用對象池技術。 ...
  • 一、函數嵌套 1.函數的嵌套調用 在調用一個函數的過程中又調用其他函數 將一個大工能拆解成很多小功能 每個函數名都是全局變數,可以在全局有效 2.函數的嵌套定義 在函數內定義其他函數 子函數只能能在函數中被使用,子函數名只在局部有效 最外層函數相當於一個容器,裝了很多子函數 3.函數的嵌套調用和嵌套 ...
  • 百度網盤:Python項目開發實戰(第2版)PDF高清完整版免費下載 提取碼:exep 內容簡介 本書來自真正的開發現場,是BePROUD公司眾多極客在真實項目中的經驗總結和智慧結晶。作者從Python的環境搭建開始講起,介紹了Web應用的開發方法、項目管理及審查、測試與高效部署、伺服器調試等內容, ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 作者:彥頁走刀口 今天我們來看看用ghpython怎麼實現koch曲線的分形效果,前兩天分享的雪花分形是利用grasshopper的迴圈插件anemone實現的,然後有個小伙 ...
  • 前言 在朋友的項目有個自定義配置文件user.yml,其內容如下 user: userId: 1 name: 張三 email: [email protected] 其映射實體內容為如下 @Data @AllArgsConstructor @NoArgsConstructor @Builder @Pro ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...