PowerBuilder编程新思维6.5:外传1(PowerPlume的设计与规划)
<第五部分 Otherside 意外的宝藏>
每一颗种子都有发芽的梦想。PowerPlume(孔雀翎)开发交流群:286502392
PowerBuilder编程新思维6.5:外传1(PowerPlume的设计与规划)
前言
本来这个系列一直在鸽,直到遇到了一位大佬:

看到大佬这么有诚意的样子,于是我可耻地同意了,之后大佬要我建群方便沟通,建了之后,为了方便群里的大佬们,我又连夜肝了这期博客。
PowerPlume的由来
从我写下《PB编程新思维》这个名字开始,已经过去了十年时间。在这期间,由于我的工作完全与PB无关,所以只能在业余时间心血来潮式的搞一搞。从一开始,文章完全只是一个目录,到慢慢积攒到一些心得,最后开始编写代码,写到现在内容已经跟当初预想的面目全非了。
我的想法很简单,就是针对PowerBuilder的缺点来改进,针对优点进行强化。
替代突出弱点:
突出弱点:
- 非常匮乏且难扩展的基础库
- 非常原始且封闭的交互界面
- 非常脆弱的源代码保护机制
替代方案:
- 使用脚本引擎替代扩展功能(PbniLua)
- 使用自绘界面替代传统界面(PbniDui)
- 使用原生编译替代伪码编译(PbniStl)
这三种替代方案给PB注入了新活力,至少从一个有明显弱点、古老的工具,变成了一个比较可靠、现代的开发工具。
升级核心价值:
替代了弱点当然还不够,升级一下核心价值,提高PB的竞争力。
核心价值:
- 成熟的所见即所得界面设计
- 方便的多种数据库检索更新
- 独特的DataWindow数据展示
升级方案:
- 自动生成代码以及更换DW主题(CSS)
- 升级REST与BS两种三层架构(Lua/Web)
- 使用网页窗口丰富数据窗口(Wui)
引入CSS,算是把PB从原始社会进化成了现代社会。引入REST接口进一步加强了与主流工具的联系,最后使用Web窗口重写DataWindow,彻底把PB与Web联系在了一起。
废弃低效方案:
在PowerPlume的演进过程中,对于一些有趣但价值不高的内容,进行了更改和舍弃。
废弃方案:
- PowerHttpd 网页应用服务器
- PowerNative 手机应用开发
- PowerDriver 测试驱动(Selenium)
废弃原因:
- PB本身的多线程功能很弱,而应用服务器对性能要求很高,与其开发低质量的应用服务器,还不如放弃,而Rest接口的引入也彻底废弃了PB应用服务器。
- 同样的道理,也放弃了对手机应用开发的支持。
- 最后,测试工具对PB的支持有限,最大的限制是不支持DW,这就限制了PB工具90%的功能了。所以一直想做一个Selenium Driver来支持PB。仔细研究之后,发现这是一个力气活,工作不复杂但很多。明明是厂商自己的责任,没理由替它累死累活。再加上AirTest这个基于图像识别的测试工具的出现,彻底打消了我的念头。
更改方案:
- PowerProvider 三层服务器ADO支持
- PowerEngine 3D游戏引擎支持
- PowerReact 2JS编译器
更改原因:
- 定制ADO驱动,来支持三层服务器这个方案已经有成熟产品,我就不讨论了。但PowerPlume用REST接口来替代了这个方案。
- 在PB的支持游戏引擎是我很早就已经研究并实现了,却一直不能落地的功能。因为开发一个界面所用的精力太大,很少人有预算来做这样的投入。所以使用Web替代了这个功能,不是Web开发的精力少了,而是可能性更多了。
- 而一个与PB兼容的开源2JS编译器,也只是一个想法而已,毕竟那是别人的饭碗。把PB代码转换成其它语言,需要开发的东西太多了,没有足够的吸引力。所以改为WebDW方式。
PowerPlume的博客大纲
第一部分 Inside 无形的枷锁
PB实在太古老了,长久的积淀变成了沉重的包袱,像是一个无形的枷锁制约着工具的发展。
PowerBuilder编程新思维1—扩展(Lua)
PowerBuilder编程新思维2—嵌入(多线程)
PowerBuilder编程新思维3—适配(GraphQL)
第二部分 Outside 哭泣的小丑
这是一个看脸的时代,PB无论怎么努力打扮,在别人眼中就是一个小丑。这位哭泣的小丑,怎样努力才是未来?
PowerBuilder编程新思维4—钩挂(在DW中显示,打印)
PowerBuilder编程新思维5—包装(用DirectUI美化界面)
PowerBuilder编程新思维6—装饰(用最简单的方式做框架)
第三部分 Backside 纯黑的噩梦
安全像一个纯黑的噩梦,只给了PB开发者绝望。
PowerBuilder编程新思维7—剥离(用CSS美化DW)
PowerBuilder编程新思维8—克隆(ORCA有价值的用法,批量生成代码)
PowerBuilder编程新思维9—切分(从逻辑上实现源码安全)
第四部分 Frontside 失落的国度
PB像一个曾经辉煌但已失落的国度,要想焕发新生,就必须回到主流的世界。
PowerBuilder编程新思维10—增强(以DW的方式扩展WEB,PDF浏览)
PowerBuilder编程新思维11—集成(Push实时消息推送)
PowerBuilder编程新思维12—分享(使用Excel做报表)
第五部分 Otherside 意外的宝藏
记录开发过程和不起眼的,但是效果很好的创意
PowerBuilder编程新思维6.5--外传1(PowerPlume的设计与规划)
PowerBuilder编程新思维10.5--外传2()
PowerBuilder编程新思维11.5--外传3()
PowerBuilder编程新思维12.5--外传4()
PowerBuilder编程新思维12.6--外传5()
PowerPlume的后续规划
组成部分:
- PbLua,内嵌脚本语言,轻量级多线程。
- PbDui,使用Duilib替代原生界面,美化界面控件。
- PbStl,使用CSS修改数据窗口,同时可防止反编译。
- PbWui,使用Web控件替代部分原生界面,同时支持三层模式。
PowerPlume会作为免费框架,开放给大家使用,有条件的公司可以购买源码,会提供2年的源码更新服务。
至于进度,我尽量吧:)
<本节完>
PowerBuilder编程新思维6.5:外传1(PowerPlume的设计与规划)的更多相关文章
- PowerBuilder编程新思维5:包装(界面美化与WebUI+React)
PowerBuilder编程新思维5:包装(界面美化与WebUI+React) 前一节,分析了三种界面美化方案,都是控件级的美化.今天再来分析一下窗口级的美化.上一次讲的DirectUI,大家反响一般 ...
- PowerBuilder编程新思维4:钩挂(界面美化与DirectUI)
<第二部分 Outside> PowerBuilder编程新思维4:钩挂(界面美化与DirectUI) PB的界面由于其封闭性,一直以来都是最大的弱项.自PB9.0开放了PBNI接口后,开 ...
- PowerBuilder编程新思维3:适配(三层架构与GraphQL)
PowerBuilder编程新思维3:适配(三层架构与GraphQL) PB在富客户端时代,是一线开发工具.随着网络发展,主流架构演进到三层架构的时代,PB拿不出有力的三层架构,已经明显力不从心,市场 ...
- PowerBuilder编程新思维2:嵌入(Thread多线程)
PowerBuilder编程新思维2:嵌入(Thread多线程) 在PB中使用多线程,在网上有大量的文章介绍.不过深入研究并试着给出更易用的模型的,目前还只有"路人甲cw"的一篇& ...
- PowerBuilder编程新思维1:扩展(Lua)
前言 PowerBuilder作为开发工具退出一线行列已经很久了,在2019年来谈这样一款老旧的编程工具是否有意义?诚然,PB有着太多硬伤,但还是有它的用武之地的.而且今天讲的这个“新思维”大部分内容 ...
- C++编程新思维中的技巧
1.编译器断言 技巧大致跟后面的一样,都是利用偏特化,但是在C++ 0X里面已经有static_assert,所以感觉这东西也没什么用处了,更多的只是开阔眼界 2.偏特化 就是专门对一个类型去进行特殊 ...
- 【响应式编程的思维艺术】 (2)响应式Vs面向对象
目录 一. 划重点 二. 面向对象编程实例 2.1 动画的基本编程范式 2.2 参考代码 2.3 小结 三. 响应式编程实现 四. 差异对比 4.1 编程理念差异 4.2 编程体验差异 4.3 数学思 ...
- 《C++设计新思维》Command设计模式读后感
原文内容提领: 本书第5章标题为泛化仿函数,我认为本章真正讲述的内容可以总结出一句话! 如何利用C++老标准实现C++11新标准类似std::function提供的功能. std::function简 ...
- 《C++设计新思维》勘误,附C++14新解法
勘误: 原书(中文版)3.13节,65-69页中GenScatterHierarchy以及FieldHelper均存在问题,当TypeList中类型有重复时,无法通过编译(原因在于“二义性基类”). ...
- restapi(7)- 谈谈函数式编程的思维模式和习惯
国庆前,参与了一个c# .net 项目,真正重新体验了一把搬砖感觉:在一个多月时间好像不加任何思考,不断敲键盘加代码.我想,这也许是行业内大部分中小型公司程序猿的真实写照:都是坐在电脑前的搬砖工人.不 ...
随机推荐
- powershell 设置代理
$env:HTTP_PROXY="http://127.0.0.1:10809" $env:HTTPS_PROXY="http://127.0.0.1:10809&quo ...
- Django用户认证组件 (auth模块)
1.导入 auth 模块 # 认证模块 from django.contrib import auth # 对应数据库用户表,可以继承扩展 from django.contrib.auth.model ...
- vim快捷键之复制粘贴
yy: 复制光标所在行 p: 将复制的内容粘贴到光标所在行的下一行 P: 将复制的内容粘贴到光标所在行的上一行
- Swift 模式下面LLDB 输出对象
(lldb) expr -l Swift -- import UIKit (lldb) expr -l Swift -- let $pin = unsafeBitCast(0x7f81c8d459f0 ...
- 将mnist训练的caffemodel生成动态链接库DLL
在项目程序中经常看到动态链接库,非常好奇,想自己实现一下,于是乎尝试一波.就因为这种好奇,每天都被bug所困扰... 1. 训练caffemodel 在windows环境下搭建caffe无果,转投Ub ...
- TIM_Cmd()函数引发的思考
在使用定时器的输入捕获进行频率测量时发现用TIM_Cmd()函数关闭定时器后,输入捕获中断还是会被触发,这就很奇怪了,输入捕获是定时器的一种模式,关闭定时器不就意味着输入捕获捕获也被关闭了吗?可是实际 ...
- js 判断手机号格式
大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...
- 《python核心编程《第二版》》笔记章节索引
本文章作为我的其它一系列关于<python核心编程<第二版>>的笔记的文章索引. 第一章:Python-快速入门:https://www.cnblogs.com/mrlayfo ...
- react路由过渡动画效果
render() { return ( <div> <li><Link to="/home">Home</Link></li& ...
- 算法金 | LSTM 原作者带队,一个强大的算法模型杀回来了
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 时间拉回 2019 年,有「计算机界诺贝尔奖」之称图灵奖获得者公布,深度学习三巨头:Y ...