標籤:日誌 ike 設定 搭建 3.3 text 擷取資料 erp 自動更新
本文轉自:https://www.cnblogs.com/wuhuacong/p/3199829.html
從事Winform開發架構的研究和推廣,也做了有幾個年頭了,從最初的項目雛形到目前各種重要特性的加入完善,是經過了很多項目的總結歸納和升華,有些則是根據客戶需要或者應用前景的需要進行的完善,整個Winform開發架構具有很好的通用性和借鑒性,本文從該Winform開發架構進行概括總結,力求把各個重要的特性進行一些詳細的說明,使大家瞭解整個Winform開發架構的面貌和特性。
Winform開發架構總體性概括有:支援外掛程式化應用開發,能夠動態配置及載入開發的外掛程式;菜單支援動態配置,可根據使用者權限進行動態控制顯示;整合各種獨立開發好的模組,如許可權管理系統、字典管理模組等,自動更新模組等,實現系統的許可權控制、字典管理、軟體支援遠程自動更新等功能;可重複使用的系統基礎模組,Winform分頁控制項和.NET開發公用類庫等;整個架構通過與代碼產生工具Database2Sharp進行配合,能夠一鍵產生整體性架構代碼,Winform系統介面代碼,開發更高效。
整個Winform開發架構,提供了很多常見業務系統提供的功能,包括Excel資料匯入匯出,能快速匯入自訂模組的Excel資料,快速匯出列表資料;自訂Excel自訂模板報表的產生,產生各種複雜的Excel報表;強大通用的統計圖表模組,資料統計更方便;基於多資料的資料查詢模組和通用進階查詢模組,查詢資料更方便;架構提供基於多種資料庫(Sqlserver/Oracle/Mysql/Sqlite/Access)的整合,能夠手動設定資料庫類型,通用模組內建支援多種資料庫切換;架構提供了高度封裝的資料訪問基類,開發代碼更少更高效;架構介面基類也進行統一封裝,使用更方便,效果更統一;架構提供基礎性的支援,包括整合登陸、閃屏、托盤功能,以及為外掛程式模組提供登陸使用者資訊和系統資訊。
Winform開發架構的主要功能概覽如所示。
1、支援外掛程式化應用開發,能夠動態配置及載入開發的外掛程式
架構實現基於外掛程式化的應用,如下所示。
支援外掛程式化應用的開發架構能給程式帶來無窮的生命力,也是目前很多系統、程式追求的重要方向之一,外掛程式化的模組,在遵循一定的介面標準的基礎上,可以實現快速整合,也就是所謂的熱插拔操作,可以無限對已經開發好系統進行擴充,而且不會影響已有的功能,不再需要的模組,通過修改配置移除即可。
外掛程式化應用也是目前架構和系統開發的主流方向,從開發企業的產品管理角度來看,第一可以把控好已有的架構產品,第二可以把內部的人員分配到不同的業務模組中,讓他們遵循一定的介面即可快速開發,從而提高團隊對業務模組的橫向切割和快速開發的效率,更好、統一、高效完成企業化應用程式框架的搭建和使用。
2、菜單支援動態配置,可根據使用者權限進行動態控制顯示
一般Winform程式中,菜單都是直接寫在主程式中的,這樣對於修改和維護菜單的相關資訊,可能有所不便,而且對於外掛程式化應用,新增菜單是常見的事情,這樣就需要對菜單進行動態組態管理了,通過後台菜單的配置和許可權的指定,能夠實現菜單的動態載入和許可權驗證。
因此菜單也是許可權分配的一部分,為了有效管理菜單資源,我們把菜單放到許可權管理系統中進行管理控制。
設定好菜單的表徵圖和Winform表單類型,就能在Winform架構中動態構建菜單資訊了。菜單的圖表放置在系統的相對目錄下即可。
3、整合各種獨立開發好的模組,如許可權管理系統、字典管理模組等,自動更新模組等 3.1 許可權管理模組
許可權的分配和管理,基本上是每個業務系統需要考慮的東西,而這些常用的東西,在整個Winform開發架構中,把它作為一個獨立的模組,既方便維護管理,也留有介面很容易進行整合,這樣能夠在項目中反覆進行使用。
許可權系統需要考慮的系統使用者、組織機構、角色、許可權定義及分配、菜單管理、使用者登入日誌等相關資訊。對於每新增一個系統,我們只需要在許可權管理系統中增加一個系統類別型定義,以及相關的功能、菜單資料即可,非常方便管理。
3.2 字典管理模組
另外,除了許可權的管理,字典管理也是常規業務模組的一個總要功能,因此字典管理模組在Winform開發架構中,也是一個獨立的模組進行開發管理,在使用的時候進行整合即可。
字典的分類可以按多級進行分類管理,可以拖拉進入新的分類,非常方便。
3.3 自動更新模組
一般情況下,為了有效管理應用程式的發布及更新,我們需要軟體支援遠程自動更新功能;在Winform開發架構中再引入一個自動升級更新的通用模組,這個自動升級的通用模組除了具備一般的功能外,可以通過配置程式標題、升級路徑方式等方式,實現通用化的升級操作,其他需要升級的程式,拿過來就可以使用,經過項目的整合及最佳化,已經具備較好的應用前景了。
本通用自動更新模組具有下面幾個特點:
1)程式標題可配置,更新路徑可配置,適用於各種需要更新的項目整合。
2)支援檔案複製或者對壓縮包進行解壓,適合更多瑣碎程式集的整體升級。
3)支援檔案更新後自動啟動,或者帶參數的啟動方式。
4、可重複使用的系統基礎模組,Winform分頁控制項和.NET開發公用類庫等4.1 Winform分頁控制項
為了提高資料的擷取及顯示效率,一般情況下,我們都需要對資料進行分頁擷取和顯示,在網路化環境,這種方式擷取資料特別重要,在Winform裡面,沒有現成的分頁控制項可以使用,因此出於這個考慮,把資料顯示、資料匯出、資料列印等眾多功能整合一起,更加方便使用。分頁控制項完美支援列表資料的分頁,可以調整顯示列及順序,是否顯示複選框,欄位別名,奇偶列的顏色變化,列資訊提示和資料複製等等眾多實用細緻的功能的。
列表的資料繫結及顯示代碼,通過代碼產生工具,可以一鍵產生所需的介面代碼,開發效率飛一般的提升。
4.2 .NET公用類庫
俗話說,一個好漢十個幫,眾人拾柴火焰高等都說明一個道理,有更多的資源,更豐富的積累,都是助你走向成功,走向頂峰的推動力。就我們開發人員而言,其中技巧的積累、資源的積累,就是類似一個個好漢、一根根好柴,是我們能夠進行高效開發的保證和推動力。
這些類庫是我從事多年軟體開發,逐漸提煉和發現的一些閃光點或者好片段,有些是吸收別人的優秀的東西,有些是自己逐步提煉的精華,以前,在網路上看到一些開源的項目,總會先看看其是否有封裝良好、功能獨立的輔助類庫,發現好的輔助類庫,總是欣喜若狂好一陣子,學習中逐步積累,研究中逐漸提煉,多年過後,略有小成,終為今天所介紹的輔助類庫集合。這些輔助類庫平時也並不是所有的都會用得上,不過一些常用的,幾乎各個項目就會用到,類庫涉及面非常廣,能夠為我們開發節省很多時間,並且我們也可以根據自己的需要進行擴充完善,形成自己的類庫集合。
部落格公用類庫線上協助文檔列表:
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(1)----開篇總結
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(2)----常用操作
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(3)----資料庫相關操作
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(4)----CSV、Excel、INI檔案、隔離儲存區 (Isolated Storage)等檔案相關
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(5)----熱鍵、多線程、表單動畫凍結等表單操作
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(6)----全屏、表徵圖擷取、圖片列印、頁面預覽截屏、圖片複雜操作等
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(7)-----聲音播放、硬體資訊、鍵盤類比及鉤子、滑鼠類比及鉤子等裝置相關
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(8)----非對稱式加密、BASE64加密、MD5等常用加密處理
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(9)----各種常用輔助類
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(10)---各種線程同步的集合類
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(11)---各種線程相關操作類
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(12)--- 網路相關操作輔助類
5、代碼產生工具Database2Sharp的整合
整個架構通過與代碼產生工具Database2Sharp進行配合,能夠一鍵產生整體性架構代碼,Winform系統介面代碼,開發更高效。
在整個Winform開發架構中,Database2Sharp產生出來的代碼體現了非常完美的整合性,能夠無縫接入開發的架構系統中,無論是常規的商務邏輯和資料訪問層代碼,以及一些列表、編輯介面的Winform介面代碼,都能快速產生,稍作調整即可滿足業務模組的需要。
Database2Sharp是一個簡單點擊幾次滑鼠就能完成一周代碼量的代碼產生工具,效率驚人、友好體貼,真正的開發好伴侶。提供了對SqlServer 2000、SqlServer 2005、Oracle、Mysql、Access、SQLite的支援;可以產生各種架構代碼、Winform介面代碼,並且和Winform開發架構完美整合,體現出更高的開發效率。
6、通用的Excel資料匯入匯出,能快速匯入自訂模組的Excel資料,快速匯出列表資料
由於一般的業務系統,經常性的資料匯入時很正常的業務需求,因為畢竟使用Excel來操作資料也很方便,或者由於系統之間的資料交換需要,我們需要提供一個入口給客戶匯入所需要的資料。但是匯入資料的時候,不同的業務資料對應不同的Excel檔案,很難做到統一,但如果是每個業務模型,都建立一個不同的匯入介面來操作Excel資料,又會覺得可能某種程度上重複勞動,增加開發及維護成本。
那麼有無一種介於兩者之間的方法,來實現效率的最佳化,並且能夠統一利用好一個匯入的介面呢,在開發領域,只要能想到的,一般也能做到,由於工作的需要,在我的Winform開發架構中引入了一個通用的資料匯入模組,來實現這個既是統一,又是變化的業務需求。Winform架構提供的個通用的Excel資料匯入匯出機制,通過代碼產生工具Database2Sharp自動產生的程式碼,就包含了如何使用這個通用匯入模組的相關代碼以及該模組的匯出資料的代碼,我們要做的就是在系統運行起來,匯出一些資料作為某個模組的Excel模板即可。下面的功能按鈕就是使用代碼產生工具自動產生的介面包含的按鈕。
通用資料匯入功能,包含下面幾個方面的內容。
下面就是一個實際產生的功能模組,其匯入介面的運行效果。
在最底的狀態列裡面,但我們儲存資料的時候,會調用後台線程進行資料儲存,並顯示資料匯入的進度狀態,由於是採用後台線程處理,不會阻塞當前的介面,在多文檔的Winform開發架構介面中,可以切換到其他業務介面進行其他處理,不影響整體介面操作。
7、自訂Excel自訂模板報表的產生,產生各種複雜的Excel報表
很多情況下,我們需要產生比較專業的Excel模組,因此自訂模板報表就是一種很好的方案,Winform開發架構提供了多種自訂Excel報表的產生。
使用普通的二維表,雖然能滿足大多數的情況,不過在一般的業務中,自訂模板的報表根據貼近實際,符合客戶的要求,雖然自訂模板的報表,比普通的二維報表複雜一些,不過利用Apose.Cell控制項,並在預設模板中預設變數,可以產生很複雜的報表。
具體的自訂模板報表可以參考下我總結的兩篇文章。
使用Aspose.Cell控制項實現Excel高難度報表的產生(一)
使用Aspose.Cell控制項實現Excel高難度報表的產生(二)
例如產生一個標準的出庫單,這個表單有表頭資訊,列表資料資訊,並非一個普通的二維表,而且這種格式比較固定,因此很適合自訂模組報表的產生操作。
其他設計範本如下所示:
實際產生的報表如下所示:
8、強大通用的統計圖表模組,資料統計更方便
統計圖表在很多項目都可能用到,整合到架構中,更方便大家對一些圖表項目的設計理解以及功能的重用。在一般的傳統的架構中,可以採用ZedGraph開原始檔控制或者微軟內建的MSChart進行圖表設計,DevExpress控制項套件有自己的圖表控制項,這裡主要介紹基於DevExpress控制項的圖表控制項進行圖表設計。
8.1 普通統計圖表
這裡指的普通統計圖表,只是對錶某一項目進行單一的統計,可以從餅狀圖、柱狀圖的圖表中體現這些項目各自所佔的比例和數值,在Winform架構中的普通統計圖表模組中,包括了餅狀圖、柱狀圖和資料表格,這樣更方便對資料進行全面的分析和查看。整個模組是可以重用的,指定欄位屬性就可以比較合理的展現出不同分類項目的統計效果了,具體如下所示。
上面的統計圖表中,還包含了下面兩個功能模組,如下所示。
8.2 動態項目統計圖表
有時候,對於表裡面的資料,可能要對不同類型的內容進行動態統計,以確定他們各自的比例情況,那麼這些動態項目的統計圖表就比較合適了,例如,對於病人資料的管理,可能需要統計各種病種所佔的比例或者各種職業類型的犯病率,這些不太確定的統計項目,就需要一個能夠支援動態項目的統計圖表進行支撐,對於本Winform架構,為了較好呈現這個類型報表的意義,我選擇了對備件類型所佔的比例進行一個統計分析,得到下面的統計圖表,如下所示。
上面的圖表統計,除了能夠根據一些條件進行限定查詢範圍外,還可以對一些預設的統計欄位進行動態選取,然後根據欄位裡面的各種內容(統計項目)進行統計,這樣就可以比較有效統計出各種類型的數值和比例了。
8.3 多重座標組比統計圖表模組
在Winform架構裡面,可以對某一年各月份的出入庫數量進行一個分析,得到下面的統計圖。
以上資料不多,展現可能不太好看,下面我給出我另一個軟體系統的介面,其中對病人的出入院記錄進行一個統計對比分析,統計報表如下所示。
9、基於多資料庫的資料查詢模組和通用進階查詢模組,查詢資料更方便
在我的Winform開發架構中,使用了一個查詢輔助類SearchCondition來實現查詢條件的擷取和轉化,這個輔助類內建了對多種資料庫條件的分析處理,因此能夠很好產生所需要的資料查詢條件,正確高效擷取所需的資料進行顯示。
/// <summary> /// 根據查詢條件構造查詢語句 /// </summary> private string GetConditionSql() { //如果存在進階查詢對象資訊,則使用進階查詢條件,否則使用主表條件查詢 SearchCondition condition = advanceCondition; if (condition == null) { condition = new SearchCondition(); condition.AddCondition("ItemName", this.txtName.Text, SqlOperator.Like) .AddCondition("ItemBigType", this.txtBigType.Text, SqlOperator.Like) .AddCondition("ItemType", this.txtItemType.Text, SqlOperator.Like) .AddCondition("Specification", this.cmbSpecNumber.Text, SqlOperator.Like) .AddCondition("MapNo", this.txtMapNo.Text, SqlOperator.Like) .AddCondition("Material", this.txtMaterial.Text, SqlOperator.Like) .AddCondition("Source", this.txtSource.Text, SqlOperator.Like) .AddCondition("Note", this.txtNote.Text, SqlOperator.Like) .AddCondition("Manufacture", this.txtManufacture.Text, SqlOperator.Like) .AddCondition("ItemNo", this.txtItemNo.Text, SqlOperator.LikeStartAt) .AddCondition("WareHouse", this.txtWareHouse.Text, SqlOperator.Like) .AddCondition("Dept", this.txtDept.Text, SqlOperator.Like) .AddCondition("UsagePos", this.txtUsagePos.Text, SqlOperator.Like) .AddCondition("StoragePos", this.txtStoragePos.Text, SqlOperator.Like); } string where = condition.BuildConditionSql().Replace("Where", ""); return where; }
/// <summary> /// Sql的查詢符號 /// </summary> public enum SqlOperator { [Description("Like 模糊查詢")] Like, [Description("Not LiKE 模糊查詢")] NotLike, [Description("Like 開始匹配模糊查詢,如Like ‘ABC%‘")] LikeStartAt, [Description("= 等號")] Equal, [Description("<> (≠) 不等號")] NotEqual, /// <summary> /// > 大於符號 /// </summary> [Description("> 大於符號")] MoreThan, [Description("<小於符號")] LessThan, [Description("≥大於或等於號 ")] MoreThanOrEqual, [Description("≤ 小於或等號")] LessThanOrEqual, [Description("在某個字串值中")] In }
另外,一個好的資料查詢 ,一般有一個強大的進階查詢模組,這個模組在很多程式中都很常見,也是給客戶擴充查詢的一個很好的補充,由於我一直希望我的Winform開發架構能夠精益求精,所以做了這個通用進階查詢模組,希望對今後我自己所有的項目以及架構本身,都能高效的使用。
在介紹輸入條件的時候,我們注意到,查詢輸入,基本上可以分為幾類:其一是常規的文本類型,使用文字框替代即可;其二是下拉式清單類型,使用者從列表下面選擇內容;其三是日期類型,需要使用者指定開始日期和結束日期;其四是數字類型,需要使用者指定起始和結束的數值。
1)常規的文本類型條件輸入介面:
2) 下拉式清單類型條件輸入介面:
3) 日期類型條件輸入介面:
4) 數字類型條件輸入介面:
10、架構提供基於多種資料庫(Sqlserver/Oracle/Mysql/Sqlite/Access)的整合
雖然我們在實際項目中,一般採用一種資料庫進行處理,但是不同的項目,採用的資料庫類型可能不同,本Winform開發架構為了方便示範和擴充的需要,內建支援了Sqlserver/Oracle/Mysql/Sqlite/Access,更多的資料庫,也可以通過擴充資料庫訪問基類的方式進行更多資料庫的支援。
Winform開發架構裡面的所有模組,如用到了資料存放區的,如許可權管理管理模組、通用資料字典管理模組,均內建支援這幾種資料庫的整合支援。整個Winform開發架構的資料庫訪問,能夠手動設定資料庫類型,對於同一種資料庫,也可以把資料存放區分開儲存,如業務資料存放區在一個資料庫,許可權管理控制儲存在另外一個資料庫這種方式。
Winform開發架構提供多種資料庫支援,資料訪問基類依然很精簡,因為我們利用的資料庫訪問模組是EnterpriseLibrary,把資料庫抽象化,並且我把所有資料庫通用操作放在了一個超級基類上,具體的資料庫基類只需要實現變化的部分即可。業務訪問類則使用泛型進行封裝處理。
因此,Winform開發架構提供了高度封裝的資料訪問基類,開發代碼更少更高效。
11、架構介面基類也進行統一封裝,使用更方便,效果更統一
為了更好開發常用介面模組,Winform開發架構把一些公用的介面模組,統一放置在了一個BaseUI的項目中,把其中的通用進階查詢、通用資料匯入模組、常見處理介面基類,外掛程式介面等模組放在一起,根據易於管理和使用。這樣開發的模組,重用很多常規的介面,開發效率更快,使用更方便,效果更統一了。
12、架構提供基礎性的支援,包括整合登陸、閃屏、托盤功能,以及為外掛程式模組提供登陸使用者資訊和系統資訊
整個Winform開發架構,是有一個架構啟動模組進行集中處理的,系統啟動後,使用者登入處理後,通過動態載入菜單和外掛程式模組,並在主體架構介面中進行展示,提供許可權控制和登入使用者資訊等方面的架構支援。另外架構支援閃屏圖片的動態配置,系統啟用熱鍵和托盤縮小燈功能。
由於系統登入後,架構本身儲存了使用者登入和許可權資訊,架構動態載入某個模組後,會把使用者資訊和許可權控制資訊,注入到模組的介面基類中,因此外掛程式的介面模組只要是繼承了BaseUI的介面基類,就能夠擷取到使用者資訊和許可權控制資訊了。
特性總結
Winform架構,本身就是為了能夠快速開發一個高效、穩定、美觀大方、擴充性強的應用軟體系統。因此我在自己十年左右的共用軟體開發生涯以及公司項目開發中,不斷思考,精雕細琢,對很多重要的特性都進行了歸納和升華,吸收項目中好的閃光點,借鑒一些好的軟體開發思路,力求把軟體做的更好;在開發效率方面,除了開發一些常規通用的模組、在模組內部又充分考慮繼承、重用的規則,還對大幅度提高效率的代碼產生工具,根據Winform開發架構的實現思路和特點,進行了完善最佳化,使得無論在業務代碼產生,還是在介面代碼產生方面,均能把開發效率發揮到極致,希望整個Winform開發架構能夠持續發揮它的魅力和吸引力,為更多的人帶來希望,體驗開發的樂趣。
[轉]Winform開發架構的重要特性總結