1. 程式人生 > >Winform開發中的困境及解決方案

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系統介面中對進展階段的動態展示和處理》。