本框架(解决方案)是一个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. Android Saripaar 注解详解

    写这篇文章的原因 在移动端一般很少使用复杂的表单,一般针对于属性的更改都会打开一个新的页面进行更改.虽然不多,但是也会有.如果一个页面要输入的内容包括姓名.地址.邮箱.手机号等,对各个属性的验证会非常 ...

  2. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”

    1.问题描述: 我的项目是tcServer,在运行的之后出现如下错误: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBin ...

  3. 最小化安装CentOS 7 系统

    目录 CentOS 程序准备 开始安装系统 创建虚拟机 安装系统 CentOS 运维最常接触的系统就是CentOS系统,无论是版本 6 还是版本 7 而且在安装系统时,讲究最小化安装系统,之后当需要什 ...

  4. 使用PaintCode便捷地实现动画效果

    // // ViewController.m // paintCodeTestOC //gif // Created by LongMa on 2019/7/25. // #import " ...

  5. 如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类

    如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类 呐,到底什么是抽象类,有时明明一个普通类就可以解决了,为啥非得整个抽象类,装逼吗 我曾带着这样的疑惑,查了很多资料,看了很多源码,写了 ...

  6. 机器学习笔记(六) ---- 支持向量机(SVM)

    支持向量机(SVM)可以说是一个完全由数学理论和公式进行应用的一种机器学习算法,在小批量数据分类上准确度高.性能好,在二分类问题上有广泛的应用. 同样是二分类算法,支持向量机和逻辑回归有很多相似性,都 ...

  7. 转:OAuth2 深入介绍

    OAuth2 深入介绍 1. 前言 2. OAuth2 角色 2.1 资源所有者(Resource Owner) 2.2 资源/授权服务器(Resource/Authorization Server) ...

  8. 数据挖掘算法(一)--K近邻算法 (KNN)

    数据挖掘算法学习笔记汇总 数据挖掘算法(一)–K近邻算法 (KNN) 数据挖掘算法(二)–决策树 数据挖掘算法(三)–logistic回归 算法简介 KNN算法的训练样本是多维特征空间向量,其中每个训 ...

  9. jQuery中操作页面的文本和值

    主要是区分俩种方法: 1.html():可以识别HTML文件,将里面内容全部打印(操作双标签) 2.text():只是将里面的内容打印出来,不能识别HTML格式(操作双标签) <!DOCTYPE ...

  10. JavaScript1 基础

    JavaScript的组成 ·ECMAScript  描述了语言的语法和基本对象/ ·DOM 文档对象模型,描述处理网页内容/ BOM 浏览器对象模型 描述与浏览器进行交互的方法和接口 引入方式/ h ...