现在的位置: 首页 > 综合 > 正文

如何写最少的代码作成本最低的软件而赚更多的钱–一切尽在OOP

2017年12月08日 ⁄ 综合 ⁄ 共 3233字 ⁄ 字号 评论关闭

一。封装,重用是唯一方法。

二。形成成熟框架。

作不到这两点,每写一套软件,哪怕是及其相似,你也只能从头开始。虽然PB是一个可以快速开发原型的系统。但总比不上花两周时间就可以交付使用来得更猛。

OOP的好处和概念自然不必说,但很多作系统的人(当然指没有架构师的情况下完成的软件。有架构师的软件从一开始就不会给你随便乱来)。

那我们以一个简单的实力来说明:

A.关于封装问题:

见PB11新开发模式的深入学习计划:以及开发思路应转变到框架重用和面向对象  http://blog.csdn.net/chengg0769/archive/2007/12/22/1958480.aspx 的ddlb的填充问题。

B.关于框架:比如菜单权限,见我的powerbuilder框架,经过三套软件的开发逐渐形成并得到完善
http://blog.csdn.net/chengg0769/archive/2007/12/13/1932284.aspx   菜单及其权限。

另外举例说明:

比如我们在"系统选项"里会涉及到很多备选项设置:

很多设置项,比如部门编码,业务种类,只需要如上图的单一DW即可完成。而且编辑方式就是几个:刷新,新增,修改,删除,保存。我们可以写五个事件,而按钮只作触发(postevent),不要把事件写在控件里,因为你可能会删除一个按钮。比如:

open:

dw_1.dataobject =  "d_XXX_FK"
dw_1.settranobject(sqlca)
if dw_1.retrieve()<1 then
   messagebox("提示","当前无资料,请建立")
end if

ue_refresh:
dw_1.retrieve()
gf_change_protect_color(0,dw_1,"-1-2-3-4-5-")   //全局函数,改变背景色和取消protect
edit_statu = "query"

ue_insert:
long insert_row
insert_row = dw_1.insertrow(0)
if insert_row < 1 then return
gf_change_protect_color(1,dw_1,"-1-2-3-4-5-")   //全局函数,改变背景色和取消protect
dw_1.scrolltorow(insert_row)
dw_1.setrow(insert_row)
dw_1.setcolumn(1)
edit_statu = "inserted"

ue_modify:
if dw_1.rowcount()<1 then return
gf_change_protect_color(2,dw_1,"-2-3-4-5-")   //全局函数,改变背景色和取消protect
dw_1.setrow(1)
dw_1.setcolumn(2)
edit_statu = "modified"

ue_delete:(略)

ue_save:(略)

我们看到gf_change_protect_color(1,dw_1,"-2-3-4-5-") 这个函数其实封装了改变编辑栏背景,并取消其保护,使得该栏可以编辑,不要再像一个初学者一样地老老实实的一个一个栏位去设置了,封装吧。

另外一个我们看到红色部分不应该写死,否则继承之后或者重用时,你需要修改代码。最好的方式就是用对象变量来设置,则重用时只需要修改即可,我的做法其实不用继承,直接另存就可以重用,类似c++中的模板编程。如下:

variables declare area:
constant str_dataobj = "d_XXX_FK"
constant str_protect_color_refresh= "-1-2-3-4-5-"

constant str_protect_color_insert = "-1-2-3-4-5-"
constant str_protect_color_modify= "-2-3-4-5-"

则我们在事件中就是如此:gf_change_protect_color(1,dw_1,str_protect_color_insert ) 

好了,成了,对不同的应用来说,dw已经封装了不同的设置项,只是栏位不同而已。好了,我们写了这一次代码后,通过在其他地方继承或者通过引用pbl即可在其他系统里使用了。我们可以这么说,如此的界面,这辈子都不要再写了。这就是OOP.
我们在具体运用时,只需要设置这几个可变部分即可在任何系统里花一分钟而重用到这个界面。

#20071231append:其实,我们把向窗口传递的必要参数,可以归整到一个struct里,则在menu里先设置一个struct的成员变量,然后通过消息机制,把struct传给窗口,则我们连继承都不需要了,还不用产生那么多对象。比如:

common_FKEDIT_struct{                             //For w_common_FKEDIT
string win_title                                 //e.g. = "部门代码基本设置"
string str_dataobj                             //e.g. = "d_XXX_FK"
string str_protect_color_refresh         //e.g. = "-1-2-3-4-5-"
string str_protect_color_insert           //e.g. = "-1-2-3-4-5-"
string str_protect_color_modify         //e.g. = "-2-3-4-5-"
}
这样我们看,通过菜单的clicked事件,传入struct给w_common_FKEDIT,我们跟在c++中的模板一样。不需要针对哪一种FK的基本设置来编写一个新窗口了。因为他们都可以用这个窗口,甚至不需要另存或者继承嘛。

所以我的软件现在在ue_xxxx这些事件里,代码越来越短,好读而且开发效率高,说到底都是OOP的功劳。当然,不要试图在没有任何经验的条件下先作封装再作项目,估计你的项目就会失败。这应该是一个是二逐渐递进叠代的过程。

当然在PB的教材里,包括一些PB数据库运用的教材里,OOP都有提到,但没有着重来讲,而大公司当然是在开发系统时框架和重用都考虑到的,而作为一些个人项目,大家得注意此方法运用。当然作为PB人,我是通过C++使得我真正明白什么叫OOP的。所以不要忘记学习另外的语言来补充自己的知识,而c++,java就是既值得学习,在其他项目里最可能用到的两种。特别是:java从你动手开始,写第一行代码开始,就在一个class里,强制你知道和明确什么叫封装和面向对象,不错,确实,只要你包在class里的东西自然就有了方便移植和重用嘛,而且有接口嘛。所以这个道理很简单,但观念好难转变。
当然class级的封装还不是很高级的,更好的一些还包括整体方案,架构,程序框架,协议,接口,格式,约定,这些。随着项目的累计,都是宝贵的财富。它们跟class一样,也是可以叠代完善并重用的。

当然。更多的重用考虑要你自己去作,去体会,可以从三个方面入手:

一,形成和整理框架
二,可视自定义控件
三,常用界面的可重用模板(如上)
四,非可视对象的抽象和形成自己的可重用类库
五,对单据常用编辑功能(insert,modify,delete,undo,check,savaas,savetoexcel,checkValid,savedata)的封装和整理,通用化.比如savedata事件:
dw_x.acepttext()
of_checkvalid()
of_checkSQLSTATUS()
of_recovery_status()
这几个过程基本是必须的,你可以写一些通用的代码。
六,最重要的,改变思路,多从其他语言体会借鉴。

抱歉!评论已关闭.