猴年马月谈GBDP2004高速编程技术体系
2004-07-29
两年前, 我在网上公布了GBDP技术体系的1.0版本(实现了初级的需求随动功能), 大家给予了很多褒贬不一的评价, 当然贬的多一些, 在这里先谢谢大家。对手是最好的老师, 因为大家的质疑, 才让GBDP技术体系在目前到达了一个全新的水平,目前是4.0版本,实现了微对象、需求随动、高速访问缓存、高速数据库访问、连接池、对象池、客户定制、加密等细节技术。如果您是第一次听说这个技术体系,那么我再简单的介绍一下:
GBDP:通用黑盒动态编程法 General Blackbox Dynamic Programming , 它不是单纯的一个技术,而是诸多优秀技术和中国现实国情结合成的一个技术开发体系,个人认为按照这个趋势发展下去,未来GBDP也许会把J2EE挤出历史舞台,这样说狂妄了点,可我私下里认为J2EE还不如GBDP,因为J2EE的目标是分布式的企业级业务处理(通俗的说,就是把技术难点转包给J2EE,回扣高了点:) ),而GBDP的目标是开发人员可以端着咖啡笑看客户肆无忌惮的更改需求,培养并树立软件公司“白发渔樵,青山依旧,几度夕阳”的风范。
GBDP目标:统一的代码风格,最短的开发时间,最少的代码,低廉的维护和管理成本,工厂流水式的开发模式,允许客户任意的变更需求(:)当然要多给点钱),允许逐次逼近的需求实现,项目交接简单,学习快速。
GBDP特点:需求随动(通俗点说,就是软件做得差不多后,客户想不给加班费就要你改程序),统一了单机、CS、BS的开发架构,使用相同源码。制作电子商务动态网站仅仅是它的一个用途,完全可以实现
ERP、财务软件、物流等大型软件的架构。自动建表,自动增删改记录,自动文件上传,自动事务处理,简单业务无须数据库,自动数据库备份。(不要误认为GBDP是一个MIS系统)
下面回答一些大家的典型疑惑:
疑惑1. 我们已经实现了一个,功能好象更强大, 但是只用于"列表,增加,修改,删除'的共用类
答:GBDP是一个技术开发体系,“自动列表,增加,修改,删除”只是其中的部分子技术,GBDP的核心是通过微对象的方式标准化、弱化“系统分析建模”,来实现需求随动的目的。
疑惑2. 排错太难了,要谨慎使用
答:因为没有接触过GBDP,当然难。到现在为止,我还不会种稻子呢,种稻太难了。顺便问一句,你的电脑主板坏了,是自己用万用表、烙铁修的吗?
疑惑3. 中国不缺程序员... 但严重缺高素质的项目管理人员...
答:非常赞同,这就是中国国情之一,但少了几个字,准确的说应该是,“目前发展水平的中国缺乏高素质的项目管理人员呆的地方”,君不见多少中国瘸驴到了国外后就被追认为“千里马”(呵呵,因为外国人IQ不如我们)。话又说回来,如果每个士兵都手持激光枪,坐着飞碟,即使将军政委都是二奶奶的上小学的女儿的有钱男朋友的被老师罚站的同班同学马仔,去扫黄打非、收复台湾还是没有问题的。
疑惑4. GBDP本质就是将业务逻辑封装在代码中,殊不知这样会产生严重的问题。首先,采用这一方法目的就是简化系统设计,提高系统的自适应能力。但是当后台数据存储接口相当简单(简陋)的时候,其与业务逻辑处理层的交互就必然变得复杂化。这是有控制论理论基础的,这方面的内容又是另一个话题了。通俗的说就是这样一个问题:面对相同的物理存储结构,如果要实现新的功能,除了重新编码,还有什么别的方法吗?但这显然违背了这一开发方法的声明:代码基本不动的自适应能力。以你的示例为例,假如我在你写完这些代码以后提出新的需求:保存时将原来的状况保存下来,这样我就知道对这个意见,前后有过几次反复。在这种情况下,以前的代码是采用替换策略的,新的需求确是要求采用累加策略。不改代码,你怎么做?当然这个问题如果用触发器的话的确可以不改代码。可惜采用你的开发方法的前提就是不用修改数据库设置。其次,简单的数据存储格式必然使数据的逻辑意义变得模糊。从直觉上讲,这样的数据对不确定的数据需求适应性是比较强一些。但这里面隐藏了一个问题,再简单的数据存储格式最后都要以用户能理解的方式呈现在用户面前。而所谓用户能理解的方式就是数据的表现形式是用户能理解的。这里面就有一个转换的过程。当需求发生变化时,也就是用户要求的数据表现形式发生变化时,这个转换过程肯定也要发生变化。如果没有准确而详细的设计文档,而数据存储结构又不能提供现有的数据表现形式,作为程序员该如何下手呢?至于这样的数据结构对性能的极大损害,不能充分利用数据库性能等问题我都懒的说了。总是这些话是要提醒大家,寄希望于通过简化系统的某一部分的设计来达到简化整个系统不仅是不现实的,相反是极端错误的。原因就在于本来可以将一个复杂的问题拆成两个简单的问题的方法放弃,非要找一种可以一次性解决的方法,而且还自以为找到了。
答:非常谢谢这位同行的质疑,能够击到要害,绝对是身经百战的高手,在下先拱手致敬。此话道出了所有专业同行的疑惑。GBDP的设计思路和传统编程的多层结构思路(形神分离,也就是脸上一套,肚子里一套)是不同的,GBDP反其道而行之,采用“形神合一,一招致敌”的战略(本质也是多层结构,但多层实现于标准模块中),从而达到需求随动的效果,当然会有性能损失,但也不是这位同行说的如此不济;非常搞笑的是,在数次和一些同事的编程擂台打赌中,GBDP的运行性能反而超过了“传统编程”方式,仔细研究后发现是对方“传统编程”中优化做得不够造成的,因为需求变动后,优化也要变动,否则性能不高;而GBDP的优化是直接做在模块中,是自动优化的,在GBDP高速数据库访问技术(GBDP技术体系中的子技术)的支持下,如果不是高水平的系统分析员设计的数据模型,在运行性能上反而会输给GBDP。我曾经做过的实验是10万条记录,MSSQL(GBDP数据表中实际是100多万条微对象记录), 非缓冲查询可以在2~9秒内完成,如果是ORACLE,还可以更快,更加不用说开启GBDP缓存后的运行如飞。
所以我不想单纯讨论“一汽解放、东风重卡”和“帕杰罗SPORT、陆地巡洋舰(GBDP可比拟成帕杰罗)”的性能比较问题,个人认为专业术语和专业理论是市场部人员说给外行客户听的,武林高手过招会去殚精竭虑"出十八罗汉拳"还是"扫螳螂腿"吗?GBDP辉煌在擂台和战场,不是国际大专辩论会上。我只有一句回答,“GBDP从战场归来”。
GBDP的配置会和J2EE一样复杂吗?如何运行GBDP代码呢?刚好相反,非常简单, 普通配置好resin等后, 把模块化的jsp文件和java文件放到相应的目录,然后建立一个空的数据库, 配置好连接, 修改dbName的值后, 就可以运行了, 连接池、数据表和记录什么的都会自动配置和建立的, 不用操心了。
(有兴趣您可以看看 http://www.chinaflcp.com 一个北京福利彩票的网站,采用GBDP 2.0 版本,几年前的作品,缺乏GBDP4.0的高速数据库访问技术和高速缓存技术等,但运行速度还可以接受了)
作者: 刘涛 @ 深圳.中国
E-mail: NewTower@tom.com , NewTower@sohu.com , 72049005@51uc.com
Mobile: 13613086264
UC: 72049005 (经常不在,发离线消息,每天都查)
QQ: 30234923 (经常不在,发离线消息,每天都查)