在我們開發各種應用的時候,都會碰到很多不同的問題,這些問題涉及架構、模塊組合、界面處理、共同部分抽象等方面,我們這裡以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系統界面中對進展階段的動態展示和處理》。