在咱們開發各類應用的時候,都會碰到不少不一樣的問題,這些問題涉及架構、模塊組合、界面處理、共同部分抽象等方面,咱們這裏以Winform開發爲例,從系統模塊化、界面組件選擇、業務模塊場景劃分、界面基類和輔助類處理、代碼生成工具輔助開發等方面介紹在實際項目開發過程當中碰到的困境和相關的解決方案,以便分析其中是如何逐步提升效率和總體用戶體驗的。html
軟件和建築工程很相似,都是須要構建一個龐大而功能完整的一個系統,而工程化也意味着須要多人協做,那麼就須要把一個龐大的系統橫向或者縱向劃分爲各個能夠獨立施工完成的模塊,雖然各個模塊之間有所銜接或者交互,可是基本上能夠以模塊化的方式來構建,這個也是工程化開發的精髓所在。sql
以一個軟件管理系統爲例,咱們儘量把精力焦點放在客戶的業務需求上,而對於常規的如權限控制、字典管理等一些經常使用的內容,因爲它們的處理邏輯在特定領域上基本上比較固定一些,能夠儘量獨立並重復使用,數據庫
而有時候,以某個特定的業務來講,同時不少處理規則也是不變的,所以也能夠以業務模塊的方式來劃分,從而相似通用模塊的方式重複使用。架構
模塊化相似小孩子搭積木的方式構建一個所要的形狀,雖然軟件和建築在這方面確定更加複雜化,可是模塊化系統是大勢所趨,也是簡化開發、易於維護、提升系統健壯性的重要舉措。框架
在Winform內置的傳統樣式裏面,雖然提供了不少很好的界面組件,不過總體效果仍是比較古板。爲了加強界面的處理效果,咱們通常使用一些第三方的界面套件做爲Winform開發的基礎,這個除了能夠提升總體界面的效果外,還在不少控件層面提供豐富的處理和響應。模塊化
之前嘗試過各類類型的界面套件,最終仍是對DevExpress情有獨鍾,不只僅是由於它是大軟件公司開發的界面套件,也是由於它在界面層次提供了不少豐富的界面組件和強大的屬性設置,可以極大知足各類界面複雜的要求。工具
使用DevExpress界面套件,可使得咱們開發的界面更加漂亮,用戶體驗也更好。佈局
或者相似效果post
前面說過,一個系統爲了簡化開發、易於維護、提升系統健壯性的能夠把它按功能方式劃分爲各個獨立模塊進行開發或者重用,而對於業務模塊來講,咱們也還能夠進一步細分。開發工具
通常系統界面中,大多數標準方式是展現業務數據的查詢列表,而後在根據須要對特定記錄進行編輯、查看、刪除等操做。
咱們把常規的列表界面,新增、編輯、查看、導入等界面放在一塊兒,除了列表頁面,其餘內容以彈出層對話框的方式進行處理,以下界面示意所示。
如對於列表內容的展現,通常展現效果以下所示,主要展現數據庫裏面的二維表信息。
除了列表界面,另一個就是對數據的明細展現界面了,這個界面內容能夠更加多元化,如在裏面承載各類控件,如文本、日期、圖片、下拉列表、樹形列表,以及咱們自定義的一些控件,如對於附件的經過管理展現控件。
有了這些標準的展現效果,咱們就能夠參照這些,使用代碼生成工具輔助頁面內容的生成的了,生成規則以數據庫元數據爲參考便可。
咱們以常規業務模塊界面來分析,主要有明細查看或編輯界面、列表界面,那麼這些界面爲了方便使用,咱們能夠抽象一部分界面處理邏輯或者共有部份內容,放在界面基類BaseEdit或者BaseDock等基類裏面,以下界面所示。
儘量把一些涉及到業務數據的處理通用規則放到基類,而變化部分則在子類進行處理便可。這樣能夠簡化生成界面的代碼,以及提升可重用率,減小維護的難度和代碼臃腫。
對於通常的業務系統,可能都會涉及到不一樣數據庫的使用,如SQLServer、Oracle、Mysql、PostgreSQL等數據庫,那麼這部分,能夠經過使用微軟企業庫或者其餘ORM方式進行處理,以實現系統對多種數據庫的良好支持。
經過上面的介紹,通用部分做爲模塊獨立使用,業務模塊的界面主要劃分列表和編輯查看界面兩部分,而各自又進行了必定的基類抽象處理,那麼相對來講已經簡化不少了,不過對於業務數據來講,咱們仍是須要作不少重複性的工做,如界面顯示、界面賦值及調用接口處理等操做,這些對業務對象固定的話,其實也是規則相似的,那麼這部分咱們結合代碼生成工具進行批量生成便可,生成後進行必定的微調,能夠極大下降出錯的概率,減小代碼的編寫量。
在咱們開發軟件的時候,解決方案項目基於必定的分層組織,每一個項目分層中,各個類的關係也是肯定的,藉助輔助工具(結合模板引擎)能夠快速生成咱們所須要的代碼,並極大提升咱們軟件的開發效率,Database2Sharp代碼生成工具就是一款專門針對咱們本身框架結構配套的開發工具。
Database2Sharp代碼生成工具,主要是基於數據庫提取的元數據信息,根據表的信息和關係,字段信息等內容,生成咱們框架所須要分層的類代碼。
對於Winform開發,能夠根據Winform框架或者混合框架的窗體界面類,生成標準的界面代碼,列表界面默認具備分頁查詢、導入導出、高級查詢、編輯、刪除事件綁定,編輯界面則具備獲取數據並顯示在控件,保存後執行更新或者寫入的操做。
除了前面介紹的部分外,通常大的方面,咱們還能夠以業務方式作一些獨立的組件模塊,以方便重複使用,這個是大的方面。
模塊化,通常須要構建好對應的框架架構,每一個獨立的模塊,都是遵循統一的框架架構方式處理,能夠極大提升代碼的開發效率和下降維護的難度。
Winform開發架構以下所示。
而對於混合方式的Winform開發,那麼還設計Web API模塊的部署,以及客戶端對Web API調用的封裝,以下所示。
小的方面,還能夠進一步劃分一些經常使用的界面處理元素,如自定義控件的方式進行特殊組件的開發工做。如隨筆《在Winform界面使用自定義用戶控件及TabelPanel和StackPanel佈局控件》、《在Winform系統界面中對進展階段的動態展現和處理》。