Ligg.EasyWinApp-000: 一款Windows应用编程框架介绍

    本框架(解决方案)是一个Windows应用编程框架和UI库,通过该框架,不需任何代码,通过XML配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制(赋值、条件判断、循环、跳转)和功能(字符/文件处理、Windows脚本执行、逻辑运算、数学运算、数据输入输出及输入验证、数据格式转换、加密解密、表单字段验证等);动态加载“即插即用“的.Net组件或COM组件实现特定的业务处理功能;支持多线程、多语言。

  •  Ligg.EasyWinForm是一个Winform应用编程框架和UI库。通过该框架,不需任何代码,通过配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制和功能;动态加载不同的“即插即用“的核心业务处理动态链接库(CBLP Dll)实现特定的业务处理功能。
  •  Ligg.EasyWinConsole是一个Windows控制台应用编程框架,与Ligg.EasyWinform相似,配合参数传入及键盘输入;通过配置文件,以类似Execel公式的方式实现基本的过程控制和功能,动态加载不同的“即插即用“的核心业务处理动态链接库实现特定的业务处理功能。
  • Ligg.EasyWinService是一个Windows服务的应用编程框架,通过一个配置文件, 定义启动/关闭、即时/定时/循环运行的作业,动态加载不同的“即插即用“的核心业务处理动态链接库实现特定的业务处理功能。实现“一个Windows服务、一个配置文件”,实现不同的业务场景下的不同的功能。可以用作运维自动化的主控台实现嵌入式设备或电脑的无人值守的、远程监控和运维。
  • Ligg.EasyWinSignalR是一个基于Windows的SignalR客户端应用编程框架,一个单用户对多台机器的即时通讯工具,内建基本功能如聊天、传送接收文件、截屏等。通过用户对机器的指令,动态加载不同的“即插即用“的核心业务处理动态链接库实现特定的业务处理功能。可以用作运维自动化的代理实现嵌入式设备或电脑的实时、远程监控和运维。

项目引用关系结构图

项目程序运行结构图

 

**说明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客户端产品点关闭按钮只是最小化(配合Tray)、弹出一个非窗口的对话框、隐藏/显示(切换)一侧的区域等等。即使对于一个Winform的熟手,在修改或拷贝一个多层继承带有Resource的的窗体时,一不小心就会弄出各种莫名其妙的错误,这个对Winform的开发人员来说应该是深有体会的。如果使用EasyWinForm,所有的界面元素完全是通过XML文件实现,这个工作交给一个IT文员来做是完全可以胜任的,核心工程师只需要把精力放到实现核心业务逻辑的代码上去就行了;并且EasyWinForm自带了类似Excel公式的基本的过程控制和基础运算/处理函数,业务逻辑的代码可以写的非常简洁(函数式),可以说核心工程师只需要写“核心”业务代码就行了。

2. 前端和后端完全分离,真正实现松耦合、后绑定轻松应对需求多变的场景,特别适合软件测试、嵌入式设备开发调试、需求阶段的原型设计等应用。

    不管系统架构是怎样的(连接嵌入式设备、直连数据库或服务器+客户端形式),由于界面和基本的过程控制完全靠配置来实现,框架后端采用动态加载“即插即用“的核心业务逻辑处理动态链接库(CBLP DLL形式),前后端就完全实现了解耦。

    比如一个ERP系统,MRP运算、复式记账法这种公式定理一样的东西,把它写在CBLP组件里,做到千年不变;变的只是流程、场景、可视化的一些东西,这些可以把它放到前端、通过传参+配置实现。

    再比如我们即将介绍的运维自动化系统,把对文件、注册表、主策略、用户用户组的处理还有软件安装/卸载、网络/数据库/电脑性能检测监控写在CBLP组件里,变的部分如:今天管理员密码修改为abcd,明天修改为1234、注册表里WSUS服务器地址要紧急改动、明天ISMS政策又增加了对屏保的管理、由于专线中断临时修改所有电脑的host文件、需要临时清查盗版软件等等,这些在EasyWinForm里通过配置增加一个表单,或在EasyWinService里增加一个Procedure就可以搞定了。对于这些变更,根本不需程序员出手。

    所以总而言之:CBLP组件的代码是以不变应万变;传递参数+配置的组合是以万变应万变。对需求多变、需求不明确、需求选项比较多的场景特别适用。

3. 支持多文化、多语言,适合跨国公司管理系统作为开发框架使用。

    在.applicationsApp-nCultures Cultures.xml做一个设置和不同级别的Annexes.xml里按语言增加条目,所有与用户交互的元素都会按Culture显示相应文字。.

致谢

    首先感谢这个时代和互联网;

    感谢博客园以及CSDNgithubstackoverflowsourceforgegiteecodeproject、codeplex 等开源共享平台,使我们只需一条网线、一台电脑就可以操习并精进一门技艺,籍以安身立命、养家糊口;

    感谢 张善友Jeffrey Su廖雪峰梁桐铭依乐祝伍华聪小坦克黄灯桥蒋金楠周金根软件教书匠金旭亮老赵灵感之源程序员邹欣周金桥瀚海潛游玩家云风tinyfoolruanyf; 你们开放真诚的分享就像阳光雨露,滋养着这颗禾苗,让我们怀着感恩的心生根发芽,开花结果。

    感谢使用本框架的同事、朋友、用户,对你们宝贵的建议我大部分在最新版本里做了修订。

    特别感谢csharpwin,虽然你的站点已经停止运营,但是你曾经分享的关于Winform方面的知识和经验对本框架形成起了很大作用,在此向你表示衷心的感谢,并致以崇高敬意和美好祝福!

    感恩前人慷慨的分享,回馈先贤智慧的引领;本人将把本框架以“一丝不挂”的姿势赤裸呈现给大家。

    开源精神永远不死!!                                                                       

结语

    本人虽然是一个老程序员,但是由于大部分时间是在企业从事管理系统和基础设施的规划、应用、实施等工作,专职开发编码的时间并不长,所以谬误之处在所难免,恳请大家在评论区多反馈并出提宝贵意见。

(如果在试用的过程中出现报错界面,请如下图点击“发送错误信息给开发者”按钮,将会自动弹出本地邮件发送报错信息给本人)

 

 

以下将分几个章节来介绍设计思路和分析源码:

Ligg.EasyWinApp-100-Ligg.EasyWinForm:一款Winform应用编程框架和UI库介绍

LiggEasyWinApp-200-Ligg.EasyWinConsole:一款Windows控制台应用编程框架介绍

LiggEasyWinApp-300-Ligg.EasyWinService:一款Windows服务应用编程框架介绍

LiggEasyWinApp-400-Ligg.EasyWinSignalR:一款基于WindowsSignalR客户端应用编程框架介绍

 

源码和测试用例请至https://www.github.com/liggin2019/Ligg.EasyWinApp访问。

目前本框架只有Ligg.EasyWinForm的源码和demo,其他项目将陆续完善并上传。

基于本框架的一些应用如Windows运维自动化系统(Ligg.WinOa)、企业网盘(Ligg.EntNetDrive)、电脑工具箱(Ligg.CmptTk),也将会陆续上传,敬请留意。

原文地址:https://www.cnblogs.com/liggin2019/p/11780431.html