Ligg.EasyWinApp-000: 一款Windows應用編程框架介紹

来源:https://www.cnblogs.com/liggin2019/archive/2019/11/02/11780431.html

本解決方案是一個Windows應用編程框架和UI庫,包括四個項目: Ligg.EasyWinForm是一個Winform應用編程框架和UI庫。通過這個該框架,不需任何代碼,通過XML配置文件,搭建任意複雜的Windows應用界面,以類似Execel公式的方式實現基本的過程式控制制(賦值、條件判斷、迴圈、 ...


 本解決方案是一個Windows應用編程框架和UI庫,包括四個項目:

  •   Ligg.EasyWinForm是一個Winform應用編程框架和UI庫。通過這個該框架,不需任何代碼,通過XML配置文件,搭建任意複雜的Windows應用界面,以類似Execel公式的方式實現基本的過程式控制制(賦值、條件判斷、迴圈、跳轉)和功能(字元處理、文件處理、Windows腳本執行、邏輯運算、數學運算、數據輸入輸出-支持String、Jonson、DataTable類型的數據);動態載入“即插即用“的.Net組件或COM組件實現特定的業務處理功能;支持多線程、多語言。
  •  Ligg.EasyWinConsole是一個Windows控制台應用編程框架,與Ligg.EasyWinform相似,不需任何代碼,配合參數傳入及鍵盤輸入;通過配置文件,以類似Execel公式的方式實現基本的過程式控制制和功能,通過動態載入“即插即用“的.Net組件或COM組件實現特定的業務處理功能。
  • Ligg.EasyWinService是一個基於Windows服務的應用編程框架,通過配置文件, 定義啟動/關閉、即時/定時/迴圈運行的作業,動態載入“即插即用“的.Net組件或COM組件實現特定的業務處理功能。實現只需一個Windows服務、一個配置文件,(同時)實現不同的業務場景下的不同的功能。
  •   Ligg.EasyWinSignalR是一個基於windows的SignalR客戶端應用編程框架,一個單用戶對多台機器的即時通訊工具,內建基本功能如聊天、傳送接收文件、截屏等。動態載入“即插即用“的.Net組件或COM組件實現特定的業務處理功能。可以用作運維自動化的代理實現電腦的實時監控和運維。

 

項目程式運行結構圖

 

**說明SeqExec.exe是一個C編寫的.net程式的啟動程式,用於檢測.net版本並安裝指定的版本,然後運行主執行程式並傳遞參數。(代碼和示例詳見:https://www.github.com/liggin2019/Ligg.SeqExec)

 

本框架的來源

      先來說說本框架的來源:

      還是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版本吧。

      後來再把這套框架拿來做了公司的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,明天修改為1234、註冊表裡WSUS伺服器地址要緊急改動、明天ISMS政策又增加了對屏保的管理、由於專線中斷臨時修改所有電腦的host文件、需要臨時清查盜版軟體等等,這些在EasyWinForm里通過配置增加一個表單,或在EasyWinService里增加一個Procedure就可以搞定了。對於這些變更,根本不需程式員出手。

3. 支持多文化、多語言,適合跨國公司管理系統作為開發框架使用。

    在.\applications\App-n\Cultures\ Cultures.xml做一個設置和不同級別的Annexes.xml里按語言增加條目,所有與用戶交互的元素都會按語言顯示相應文字。.

 

致謝

    首先感謝這個時代和互聯網;

    感謝博客園以及CSDNgithubstackoverflowsourceforgegiteecodeproject、codeplex 等開源共用平臺,使我們只需一條網線、一臺電腦就可以操習並精進一門技藝,籍以安身立命、養家糊口;

    感謝 張善友Jeffrey Su廖雪峰梁桐銘依樂祝伍華聰小坦克黃燈橋蔣金楠周金根軟體教書匠金旭亮老趙靈感之源程式員鄒欣周金橋瀚海潛游玩家雲風tinyfoolruanyf; 你們開放真誠的分享就像陽光雨露,滋養著這顆禾苗,讓我們懷著感恩的心生根發芽,開花結果。

    感謝使用本框架的同事、朋友、用戶,對你們寶貴的建議我大部分在最新版本里做了修訂。

    特別感謝csharpwin,雖然你的站點已經停止運營,但是你曾經分享的關於Winform方面的知識和經驗對本框架形成起了很大作用,在此向你表示衷心的感謝,並致以崇高敬意和美好祝福!

    感恩前人慷慨的分享,回饋先賢智慧的引領;本人將把本框架以“一絲不掛”的姿勢赤裸呈現給大家。

    開源精神永遠不死!!

結語

    本人雖然是一個老程式員,但是由於大部分時間是在企業從事管理系統和基礎設施的規劃、應用、實施等工作,專職開發編碼的時間並不長,所以謬誤之處在所難免,懇請大家在評論區多反饋並出提寶貴意見。

 

以下將分幾個章節來介紹設計思路和分析源碼:

Ligg.EasyWinForm:一款Winform應用編程框架和UI庫介紹

Ligg.EasyWinConsole:一款Windows控制台應用編程框架介紹

Ligg.EasyWinService:一款Windows服務應用編程框架介紹

Ligg.EasyWinSignalR:一款基於WindowsSignalR客戶端應用編程框架介紹

 

 

 

 

源碼和測試用例請至https://www.github.com/liggin2019/Ligg.EasyWinApp訪問。(目前只有Ligg.EasyWinForm的源碼和demo,其他項目將陸續完善並上傳)


您的分享是我們最大的動力!

更多相關文章
  • 由 楊柳依 創建於2019年11月3日,最近更新於2019年11月8日 參考資料: "大話設計模式" | "圖解設計模式" | "菜鳥教程—設計模式" UML類圖 【矩形框】代表一個類(Class)。類圖分三層: 第一層顯示類的名稱,如果是抽象類,則就用斜體顯示; 第二層是類的特性,通常就是欄位和屬 ...
  • 23種GoF設計模式概述 在前面,我們對 GoF 的 23 種設計模式進行了分類,這裡先對各個設計模式的功能進行簡要介紹,以便有個大概瞭解。後面的章節再進行詳細介紹。 創建型模式 關註於怎麼創建對象的創建型模式,他們將對象的創建與使用相互分離,對象的使用者無需關心如何創建對象,只知道怎麼使用就行,以 ...
  • 1 基礎概念 1.1. 什麼是事務 什麼是事務?舉個生活的例子 :你去小賣部買東西,“一手交錢,一手交貨“就是一個事務的例子,交錢和交貨必須全部成功,事務才算成功,任一個活動失敗,事務將撤銷所有已成功的活動。明白上述例子,再來看事務的定義 :事務可以看做是一次大的活動,它由不同的小活動組成,這些活動 ...
  • 本段源碼可以學習的地方: 1. 考慮到效率問題,可以通過上下文的機制,在屬性被訪問的時候臨時構建; 2. 可以重寫一些魔術方法,比如 __new__ 方法,在調用 object.__new__(cls) 前後進行屬性的一些小設置; 3. 在本庫中使用的重寫魔術方法,上下文這兩種基礎之上,我們可以想... ...
  • 場景 Nginx配置實例-負載均衡實例:平均訪問多台伺服器: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103019576 在上面實現了負載均衡的簡單實例,平均訪問兩個伺服器。 但是如果不想使其平均訪問,有哪些常用的分配伺服器 ...
一周排行
  • 1. 運行效果 在 "使用GetAlphaMask和ContainerVisual製作長陰影(Long Shadow)" 這篇文章里我介紹了一個包含長陰影的番茄鐘,這個番茄鐘在狀態切換時用到了翻轉動畫,效果如上所示,還用到了彈簧動畫,可以看到翻轉後有點回彈。本來打算自己這個動畫效果寫的,但火火已經寫 ...
  • 接上一篇,es部署很簡單,很快就弄好了。 但是還是有很多不玩美。 比如說:主機是本地的IP或機器名,埠是固定的9200. 而且是只有一個節點,我要在一臺機器上部署多個節點呢。 經過一段時間的摸索,做起來也很簡單,但過程切實很痛苦。 具體做法是:你想部署多少個節點,你就重覆多少次上一步的做法。啟動就 ...
  • 在項目中,需要為所有的Button、TextBox設置一個預設的全局樣式,一個個的為多個控制項設置相同的樣式顯然是不明智的。在WPF中可以通過資源設置全局樣式,主要有倆種方法: 1.第一種就是先寫好按鈕的樣式,不寫Key,然後在App.xaml中引用。 <ResourceDictionary xmln ...
  • 說明:該篇隨筆的代碼內容並非出自本人,是在其他網站搜尋的,出處已經不記得了,本次隨筆只為記錄,目的幫助自己,幫助他人。 實現的原理也不做多的贅述,直接上代碼。 第一個類是需要用到的Windows API public class Win32Api { [StructLayout(LayoutKind ...
  • 前言 在ASP.Net Core2.X調用的CreateWebHostBuilder和3.X的主要區別在於WebHost的調用,CreateDefaultBuilder被Host替換,另一個區別是對ConfigureWebHostDefaults()的調用; 由於新的主機生成器是通用主機生成器,因此 ...
  • 對於開發人員來說,常常需要在不藉助任何Microsoft Office及其他第三方軟體的情況下,打開、創建、修改、轉換、列印、瀏覽(Word、Excel、PowerPoint和PDF等)文檔,以及將數據從數據源轉換為常用的文檔格式,甚至一些其他的文檔操作。 在這裡,小編調查了業內許多開發人員,為大家 ...
  • 這次的目標是實現通過標註Attribute實現緩存的功能,精簡代碼,減少緩存的代碼侵入業務代碼。 緩存內容即為Service查詢彙總的內容,不做其他高大上的功能,提升短時間多次查詢的響應速度,適當減輕資料庫壓力。 在做之前,也去看了EasyCaching的源碼,這次的想法也是源於這裡,AOP的方式讓 ...
  • 例如想獲取尾碼名為.txt的文件 第一種方法獲取到的是對應的文件路徑 第二種方法可以獲取到文件的一些詳細信息 類似於"*.txt" 要與路徑中的文件名匹配的搜索字元串。這個參數可以包含有效的文本路徑和通配符(*和?)的組合人物,但它不支持正則表達式。 我是參照此路徑編寫的博客,用於自己查詢快速 ht ...
  • 我們在開發中Json傳輸數據日益普遍,有很多關於Json字元串的序列化和反序列化的文章大多都告訴你怎麼用,但是卻不會告訴你用什麼更高效。因為有太多選擇,人們往往會陷入選擇難題。 相比.NET Framework有三種選擇而.net core下已經沒有JavaScriptSerializer,但是大家 ...
  • c#微信公眾號開發 基本設置 參考微信官方文檔 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html 開發→基本配置 公眾號開發信息 註:1.記錄好開發者密碼,會在程式中驗證過程 ...
x