Ligg.EasyWinApp:一款Windows应用编程框架介绍-前言
本框架(解决方案)是一个Windows应用编程框架和UI库,通过该框架,不需任何代码,通过XML配置文件,搭建任意复杂的Windows应用界面,以类似Excel公式的方式实现基本的过程控制(赋值、条件判断、循环、跳转)和功能(字符/文件处理、Windows脚本执行、Python脚本执行、逻辑运算、数学运算、数据输入输出及输入验证、数据格式转换、加密解密、表单字段验证等);动态加载“即插即用“的.Net组件或COM组件实现特定的业务处理功能;支持多线程、多语言。
- Ligg.EasyWinForm是一个Winform应用编程框架和UI库。通过该框架,不需任何代码,通过配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制和功能;动态加载不同的“即插即用“的核心业务处理动态链接库(CBLP Dll)实现特定的业务处理功能。
- Ligg.EasyWinConsole是一个Windows控制台应用编程框架,与Ligg.EasyWinform相似,配合参数传入及键盘输入;通过配置文件,以类似Execel公式的方式实现基本的过程控制和功能,动态加载不同的“即插即用“的核心业务处理动态链接库实现特定的业务处理功能。
- Ligg.EasyWinService是一个Windows服务的应用编程框架,通过一个配置文件, 定义启动/关闭、即时/定时/循环运行的作业,动态加载不同的“即插即用“的核心业务处理动态链接库实现特定的业务处理功能。实现“一个Windows服务、一个配置文件”,实现不同的业务场景下的不同的功能。可以用作运维自动化的主控台实现嵌入式设备或电脑的无人值守的、远程监控和运维。
- Ligg.EasyWinSignalR是一个基于Windows的SignalR客户端应用编程框架,一个单用户对多台机器的即时通讯工具,内建基本功能如聊天、传送接收文件、截屏等。通过用户对机器的指令,动态加载不同的“即插即用“的核心业务处理动态链接库实现特定的业务处理功能。可以用作运维自动化的代理实现嵌入式设备或电脑的实时、远程监控和运维。
本框架的历史:
先来说说本框架的历史:
还是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版本吧。
后来再把这套框架拿来做了公司的Intranet应用、HR系统、MES系统,算是这个框架的2.0版本。
后来有一个软件公司做开发总监的朋友,看了这个东西后,觉得特别适合他们做软件测试,于是就拿给他们试用。他们居然把这套东西用出花来了(压力测试、功能测试、数据初始化),在界面的重用性方面提出了很多具体的需求。他们需要在功能测试、数据初始化方面只要配置一套界面,然后通过xml或json文件来动态产生不同的界面,参考他们的反馈和建议,反复迭代、修改----抽象、解耦、提纯,就演变成了今天的共享给大家的这个东西。算是这个框架的3.0版本。
再后来,在.Net Core时代,本人已经沦落为一个真正的‘软件狗’了, 用这套架构做了CMS、ERP等项目, 算是理解了‘软件设计之美’‘软件架构之美’的涵义。写代码的时候觉得别扭的地方,一定是设计没抓到要害,模型还不够纯粹。就像看一块石头和看一块水晶,当你觉得你的模型看其来像一块石头,摸起来硌手的时候,那一定是设计还有改进的空间,当你逐渐提纯之后,就有看一块水晶的感觉了。例如本框架的Resize,一直是跟着Menu走,写代码/配置界面的时候,总是觉得‘硌手’,后来某一天突然醒悟,它应该跟着View才是真理,这么一改,写代码/做配置界面就有了一种特别优美的感觉。
在疫情期间,有了一点时间,把在几个项目中的改进做了一个大的整合,终于有了一点看水晶的感觉了,作为这个框架的3.52版本,相信该版本可以作为一个长期稳定版本吧。
另外我会把上面提到的运维自动化系统匹配到最新版本的框架,写成另外一个专题“Windows运维自动化编程实战”,也会陆续分享给大家。
本框架的特点:
- 界面和基本的过程控制和基础功能通过配置实现,把程序员从繁琐重复的劳动中解放出来,提高开发效率,缩短开发周期。适用于所有.net开发人员和组织。
EasyWinForm完全可以高仿 SAP GUI、SEP客户端、360安全卫士客户端的界面,并且是完全通过配置文件实现。.net的Winform的拖拉控件上手很快,但是要实现一些复杂的东西还是需要一些奇巧淫技的,比如实现界面统一风格和样式、以单窗体模仿多窗体效果、象360的所有Windows客户端产品点关闭按钮只是最小化(配合Tray)、弹出一个非窗口的对话框、隐藏/显示(切换)一侧的区域等等。即使对于一个Winform的熟手,在修改或拷贝一个多层继承带有Resource的的窗体时,一不小心就会弄出各种莫名其妙的错误,这个对Winform的开发人员来说应该是深有体会的。如果使用EasyWinForm,所有的界面元素完全是通过XML文件实现,这个工作交给一个IT文员来做是完全可以胜任的,核心工程师只需要把精力放到实现核心业务逻辑的代码上去就行了;并且EasyWinForm自带了类似Excel公式的基本的过程控制和基础运算/处理函数,业务逻辑的代码可以写的非常简洁(函数式),可以说核心工程师只需要写“核心”业务代码就行了。
- 前端和后端完全分离,真正实现“松耦合、后绑定”, 轻松应对需求多变的场景,特别适合软件测试、嵌入式设备开发调试、需求阶段的原型设计等应用。
不管系统架构是怎样的(连接嵌入式设备、直连数据库或服务器+客户端形式),由于界面和基本的过程控制完全靠配置来实现,框架后端采用动态加载“即插即用“的核心业务逻辑处理动态链接库(CBLP DLL)形式,前后端就完全实现了解耦。
比如一个ERP系统,MRP运算、复式记账法这种公式定理一样的东西,把它写在CBLP组件里,做到千年不变;变的只是流程、场景、可视化的一些东西,这些可以把它放到前端、通过传参+配置实现。
再比如我们即将介绍的运维自动化系统,把对文件、注册表、主策略、用户用户组的处理还有软件安装/卸载、网络/数据库/电脑性能检测监控写在CBLP组件里,变的部分如:今天管理员密码修改为abcd,明天修改为1234、注册表里WSUS服务器地址要紧急改动、明天ISMS政策又增加了对屏保的管理、由于专线中断临时修改所有电脑的host文件、需要临时清查盗版软件等等,这些在EasyWinForm里通过配置增加一个表单,或在EasyWinService里增加一个Procedures就可以搞定了。对于这些变更,根本不需程序员出手。
所以总而言之:CBLP组件的代码是以不变应万变;传递参数+配置的组合是以变应万变。对需求多变、需求不明确、需求选项比较多的场景特别适用。
- 支持多文化、多语言,适合跨国公司管理系统作为开发框架使用。
在.\applications\App-n\Cultures\ Cultures.xml做一个设置和不同级别的Annexes.xml里按语言增加条目,所有与用户交互的元素都会按Culture显示相应文字。
致谢:
首先感谢这个时代和互联网;
感谢博客园以及CSDN、github、gitee、stackoverflow、sourceforge、gitee、codeproject、codeplex 等开源共享平台,使我们只需一条网线、一台电脑就可以操习并精进一门技艺,籍以安身立命、养家糊口;
感谢 张善友、Jeffrey Su、依乐祝、圣杰、伍华聪、小坦克、黄灯桥、蒋金楠、周金根、软件教书匠金旭亮、老赵、灵感之源、程序员邹欣、周金桥、瀚海潛游、玩家云风、廖雪峰、梁桐铭、tinyfool、ruanyf; 你们开放真诚的分享就像阳光雨露,滋养着这颗禾苗,让我们怀着感恩的心生根发芽,开花结果。
感谢使用本框架的同事、朋友、用户,对你们宝贵的建议我大部分在最新版本里做了修订。
特别感谢csharpwin,虽然你的站点已经停止运营,但是你曾经分享的关于Winform方面的知识和经验对本框架形成起了很大作用,在此向你表示衷心的感谢,并致以崇高敬意和美好祝福!
感恩前人慷慨的分享,回馈先贤智慧的引领;本人将把本框架以“一丝不挂”的姿势赤裸呈现给大家。
开源精神永远不死!!!
源码:
源码请至以下地址访问:
https://www.github.com/liggin2019/Ligg.EasyWinApp
https://www.gitee.com/liggin2019/Ligg.EasyWinApp
开发应用手册请至以下地址访问(正在建设中…):
https://www.gitee.io/liggin2019