本解決方案是一個Windows應用編程框架和UI庫,包括四個項目:html
項目程序運行結構圖前端
**說明:SeqExec.exe是一個用C編寫的.net程序的啓動程序,用於檢測.net版本並安裝指定的版本,而後運行主執行程序並傳遞參數。(代碼和示例詳見:https://www.github.com/liggin2019/Ligg.SeqExec) git
本框架的來源程序員
先來講說本框架的來源:github
仍是VC1.5時代,本人被「國家分配」至某研究所,擔任「軟件工程師」,有幸加入某「鐵道用制票檢票機項目」,開始了程序狗的生涯。當時爲了配合硬件工程師調試樣機,須要用C寫大量的測試用例(界面)調用inport()、outport()來作測試。剛開始不辭辛苦第天天Copy/Paste,後來一想不對,因而偷懶,按不一樣測試類型用不一樣的.ini文件作了一個界面生成器,有新的測試,就只須要Copy一下.ini文件,改一下參數就好了。最後這個任務就交給硬件工程師本身作了。這算是這個框架的萌芽吧。數據庫
後來在.net2.0時代,在某電子公司任職時,恰逢公司引進某先進的「視覺檢測設備」。可是公司的需求與設備有一些不一致的地方(籤合同時並無搞清楚),要求供應商修改主程序(其實就是界面和某些運行參數),被告知一個天價;因而從總部請來了軟件工程師和硬件工程師決定對該設備進行改造。在與軟件工程師進行本專業的友好交流時,被強行拉入這個「視覺檢測設備」的引進和改造項目。供應商也許出於內疚,破天荒提供了基於OPC協議的COM接口程序, 因而總部軟件工程師負責接口程序的編寫,本人負責界面程序---經過配置文件實現一系列測試界面進行設備調試和校勘;最後作了一個外置的界面實現很是規的項目檢測;這算是這個框架的出生元年吧。編程
轉眼到了.net4.0時代,本人在某包裝公司任職,集團決策層崇歐尚美,一直走在實踐國際化企業管理理論的前列。躬逢其盛,在本人入職的第二年公司同時落地ISMS和ITIL項目。政策和流程文件多達幾百頁,可是,全部流程在服務器和用戶端電腦上的操做如監控/巡檢/配置/部署等是須要手工或半手工(寫點腳本)進行的,並且其中2個異地工廠(也有幾臺服務器和幾十臺用戶端電腦)是沒有專職IT人員的,分別由一位財務大姐和一位電工兄弟兼職!!屢次提議上一個HP/DELL/MS的運維自動化系統,管理層置之不理。眼看運維組的兄弟要一個個辭職了,某天晚上忽然醍醐灌頂,意識到全部的這些手工或半手工的操做不就是對文件、註冊表、主策略、用戶用戶組的處理還有軟件安裝/卸載、網絡/數據庫/電腦性能檢測這些操做嗎?這些均可以程序實現,繁瑣的事只不過是要移步到每臺電腦,作大量的手指重複的敲鍵盤的動做而已。何不利用之前的程序框架作一個運維自動化系統,讓運維兄弟們足不出戶,經過預先設置、一次敲鼠標,批量完成這些重複動做,甚至能夠從一鍵完成到經過Windows服務自動完成,經過SignalR編程實時遠程完成?說幹就幹,當天凌晨畫了需求框架,而後請假一週,一週後初步完成就拿去救火,這算是這個框架的1.0版本吧。windows
後來再把這套框架拿來作了公司的HR系統、MES系統,算是這個框架的2.0版本。後端
後來有一個軟件公司作開發總監的朋友,看了這個東西后,以爲特別適合他們作軟件測試,因而就拿給他們試用。參考他們的反饋和建議,反覆迭代、修改----抽象、解耦、提純,就演變成了今天的共享給你們的這個東西。算是這個框架的3.0版本。安全
另外我會把那個運維自動化系統匹配到最新版本的框架,寫成另一個專題「Windows運維自動化編程實戰」,也會陸續分享給你們。
本框架的特色
1. 界面和基本的過程控制經過配置實現,把程序員從繁瑣重複的勞動中解放出來,提升開發效率,縮短開發週期。適用於全部.net開發人員和組織。
EasyWinForm徹底能夠高仿 SAP GUI、SEP客戶端、360安全衛士客戶端的界面,而且是徹底經過配置文件實現。.net的Winform的拖拉控件上手很快,可是要實現一些複雜的東西仍是須要一些奇巧淫技的,好比象360的全部Windows客戶端產品點關閉的Control Box只是最小化、彈出一個非窗口的對話框、隱藏/顯示(切換)一側的區域等等。即便對於一個Winform的熟手,在修改或拷貝一個多層繼承帶有Resource的的窗體時,一不當心就會報各類莫名其妙的錯誤,這個對Winform的開發人員來講應該是深有體會的。若是使用EasyWinForm,全部的界面元素徹底是經過XML文件實現,這個工做交給一個IT文員來作是徹底能夠勝任的,核心工程師只須要把精力放到實現業務邏輯的代碼上去就好了;而且EasyWinForm自帶了相似Excel公式的基本的過程控制和基本運算/處理函數,業務邏輯的代碼能夠寫的很是簡潔,能夠說核心工程師只須要寫「核心」業務代碼就好了。
2. 前端和後端徹底分離,真正實現「鬆耦合、後綁定」,輕鬆應對需求多變的場景,特別適合軟件測試、嵌入式設備開發調試、需求階段的原型設計等應用。
無論系統架構是怎樣的(鏈接嵌入式設備、直連數據庫或服務器+客戶端形式),因爲界面和基本的過程控制徹底靠配置來實現,框架後端採用動態加載「即插即用「的.Net組件(核心業務邏輯處理-CBLP組件)形式,先後端就徹底實現瞭解耦。在需求多變、需求不清晰的狀況下特別適用。好比一個ERP系統,MRP運算、複式記帳法這種公式定理同樣的東西,把它寫在CBLP組件裏,作到千年不變;變的只是流程、場景、可視化的一些東西,這些能夠把它放到前端、經過配置實現就能夠了。再好比咱們即將介紹的運維自動化系統,把對文件、註冊表、主策略、用戶用戶組的處理還有軟件安裝/卸載、網絡/數據庫/電腦性能檢測寫在CBLP組件裏,變的部分如:今天管理員密碼修改成abcd,明天修改成123四、註冊表裏WSUS服務器地址要緊急改動、明天ISMS政策又增長了對屏保的管理、因爲專線中斷臨時修改全部電腦的host文件、須要臨時清查盜版軟件等等,這些在EasyWinForm裏經過配置增長一個表單,或在EasyWinService裏增長一個Procedure就能夠搞定了。對於這些變動,根本不需程序員出手。
3. 支持多文化、多語言,適合跨國公司管理系統做爲開發框架使用。
在.\applications\App-n\Cultures\ Cultures.xml作一個設置和不一樣級別的Annexes.xml裏按語言增長條目,全部與用戶交互的元素都會按語言顯示相應文字。.
致謝
首先感謝這個時代和互聯網;
感謝博客園以及CSDN、github、stackoverflow、sourceforge、gitee、codeproject、codeplex 等開源共享平臺,使咱們只需一條網線、一臺電腦就能夠操習並精進一門技藝,籍以安身立命、養家餬口;
感謝 張善友、Jeffrey Su、廖雪峯、梁桐銘、依樂祝、伍華聰、小坦克、黃燈橋、蔣金楠、周金根、軟件教書匠金旭亮、老趙、靈感之源、程序員鄒欣、周金橋、瀚海潛遊、玩家雲風、tinyfool、ruanyf; 大家開放真誠的分享就像陽光雨露,滋養着這顆禾苗,讓咱們懷着感恩的心生根發芽,開花結果。
感謝使用本框架的同事、朋友、用戶,對大家寶貴的建議我大部分在最新版本里作了修訂。
特別感謝csharpwin,雖然你的站點已經中止運營,可是你曾經分享的關於Winform方面的知識和經驗對本框架造成起了很大做用,在此向你表示衷心的感謝,並致以崇高敬意和美好祝福!
感恩前人慷慨的分享,回饋先賢智慧的引領;本人將把本框架以「一絲不掛」的姿式赤裸呈現給你們。
開源精神永遠不死!!
結語
本人雖然是一個老程序員,可是因爲大部分時間是在企業從事管理系統和基礎設施的規劃、應用、實施等工做,專職開發編碼的時間並不長,因此謬誤之處在所不免,懇請你們在評論區多反饋並出提寶貴意見。
如下將分幾個章節來介紹設計思路和分析源碼:
Ligg.EasyWinForm:一款Winform應用編程框架和UI庫介紹
Ligg.EasyWinForm:Application-傳入參數、驗證密碼、軟件封面、啓動登陸、ReleaseForm和DebugForm
Ligg.EasyWinForm:FunctionForm: menu、tray、ControlBox
Ligg.EasyWinForm:View
Ligg.EasyWinForm:Variable
Ligg.EasyWinForm:Zone
Ligg.EasyWinForm:Control、 StyleClass、StyleText
Ligg.EasyWinForm:ResolveConstant, GetText、Action
Ligg.EasyWinForm:各控件介紹
Ligg.EasyWinForm:支持多語言
Ligg.EasyWinForm:支持多線程
Ligg.EasyWinForm:如何調試和發佈
Ligg.EasyWinForm:「即插即用「.Net組件---核心業務邏輯處理組件(CBLP)組件
Ligg.EasyWinForm:CBLP組件與數據庫接口(MySQL/MSSQL)
Ligg.EasyWinForm:CBLP組件與服務器端接口(WCF/RESTful)
Ligg.EasyWinForm:CBLP組件與嵌入式設備接口(基於OPC標準協議)
源碼和測試用例請至https://www.github.com/liggin2019/Ligg.EasyWinApp訪問。(目前只有Ligg.EasyWinForm的源碼和demo,其餘項目將陸續完善並上傳)