本框架(解决方案)是一个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. 支持多文化、多语言,适合跨国公司管理系统作为开发框架使用。

在.\applications\App-n\Cultures\ 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),也将会陆续上传,敬请留意。

Ligg.EasyWinApp-000: 一款Windows应用编程框架介绍的更多相关文章

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

        本项目是一个Winform应用编程框架和UI库.通过这个该框架,不需任何代码,通过XML配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制(赋值.条 ...

  2. (46)LINUX应用编程和网络编程之一Linux应用编程框架

    3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. ...

  3. 我的第一款windows phone软件

    我的第一个windows phone应用发布成功了,大家支持下,名字叫吕氏春秋,发布人是我的英文名xmfdsh http://www.windowsphone.com/zh-cn/store/app/ ...

  4. windows多线程编程星球(一)

    以前在学校的时候,多线程这一部分是属于那种充满好奇但是又感觉很难掌握的部分.原因嘛我觉得是这玩意儿和编程语言无关,主要和操作系统的有关,所以这部分内容主要出现在讲原理的操作系统书的某一章,看完原理是懂 ...

  5. windows核心编程 - 线程同步机制

    线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTim ...

  6. windows核心编程---第九章 同步设备IO与异步设备IO之同步IO

    同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...

  7. windows核心编程---第八章 使用内核对象进行线程同步

    使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...

  8. storysnail的Windows串口编程笔记

    storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...

  9. windows核心编程---第二章 字符和字符串处理

        使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...

随机推荐

  1. HTML 空元素(转)

    HTML 空元素 在 HTML 中,通常在一个空元素上使用一个闭标签是无效的.例如,<input type="text"> </input> 的闭标签是无效 ...

  2. JavaScript笔记九

    1.数组方法 reverse() - 可以用来反转一个数组,它会对原数组产生影响 concat() - 可以连接两个或多个数组,它不会影响原数组,而是新数组作为返回值返回 join() - 可以将一个 ...

  3. 推荐几个不错的console调试技巧

    在我们的日常前端开发中,使用最频繁的莫过于使用console.log在浏览器的控制台中打印出我们需要调试的信息,但是大部分人可能跟之前的我一样,没有意识到其实console除了log方法以外,还有很多 ...

  4. Electron存储简单数据和用户首选项推荐用electron-store

    electron-store1可以用来保存Electron应用程序或模块的简单数据持久性-保存和加载用户首选项,应用程序状态,缓存等. 1https://github.com/sindresorhus ...

  5. easyui textbox 赋值

    $('#fireInfo').textbox('setValue', tempData.fireInfo); $('#fireStartTime').datetimebox('setValue', t ...

  6. centOS系统安装-RabbitMq

    前言 消息通知机制是我们在日常业务开发总常常都会遇到:在微服务架构里,消息也是必不可少的,我们可以借助它异步实现很多业务,就拿我们日常的购物需求来说,在我们下单支付之后,我们就可以通过消息机制来异步处 ...

  7. mongoDB学习笔记(一)之操作符

    本文主要讲解mongoDb的一些常用的操作符的用法.随着作者本身的能力的提高,本文也会不断的完善. 官方文档链接为有: https://docs.mongodb.com/manual/referenc ...

  8. 华为云BigData Pro解读: 鲲鹏云容器助力大数据破茧成蝶

    华为云鲲鹏云容器 见证BigData Pro蝶变之旅大数据之路顺应人类科技的进步而诞生,一直顺风顺水,不到20年时间,已渗透到社会生产和人们生活的方方面面,.然而,伴随着信息量的指数级增长,大数据也开 ...

  9. 基于webpack实现多html页面开发框架一 准备工作

    本系列主要介绍如何基于webpack实现多html页面开发框架,这里不讲webpack的基本概念,废话不多说,直奔主题! 前置条件: 1.安装node环境,自己去官网下载安装 2.新建文件夹webpa ...

  10. idea object is not a member of package

    可能的原因: 1. pom.xml 依赖的工程没有deploy, 所有需要本地install改工程 2. 工程以来的库没有加入到 pom.xml中 3. 以上都没有问题,则右键该工程 => ma ...