C++Builder (BCB)编程规范 之 鲨鱼美美版
本鲨于2002年出道,直今的2004年,快有两年啦! 时间流逝可真快! 毕业后共打了四份工,全部是做软件书写师。都涉及到数据库的领域!.不过薪金也逐步提高了 从50,130,150,到250英镑。每次进一家公司,不是去做开发而是做维护。所以修改代码,调试程序,找出BUG。简直是莫大的痛苦,尤其是修改那些用管C语言人开发的程序,乃是今生莫大的痛苦呀!就逐步总结了一些可行的经验。
1 单元
每个单元只包含一个类的声明。类中不永许写类的实现,类成员函数不超过20个,需要被外界调用的成员函数放在Public外,其余的全部放在Proteced,明确的不想让继承者修改的话放在Private中。
包含的头文件 也就是#include <VCL.h> 在头文件应该包含该类所需要的类型的。如果cpp也包含了,那么头文件就不要在包含,使用Class vcl; 告诉头文件有些需要的已经在CPP文件中包含啦!另外对不再使用的包含文件要及时的清除出去,否则可能碰到连接出错的问题,bcb的连接提示少的可怜啊!就有苦头吃拉!还有要记得给自己加进的包含写注解啊!!
2 实现文件中
千万不要定义全局变量和全局函数,至于会发什么问题啦,只有碰到了几十万的代码,五六个项目集合,一两百个单元所可能发生的问题。 那该怎么办了? 简单把它归到所在单元的类声明中去。函数的实现代码行不要超过200行 包括之间的空格.因为人的暂时记忆能力不强啊! 为什么文章要分段落啊! 就是人暂存上下文的关联的内存是有限的呀
3 组件的属性设置和数据库的字段表名:
一般下都会在对象检查器中的设置。当调试过不去而你又忘记了设置的属性时的哭相,是多么地可气啊!而且BCB没有组件之间的比较,否则的话可以拖个同样的新组件来比一比到底哪里设置的不同! 所以没有办法只好麻烦些直接在代码中设置吧! 虽然很麻烦 却可以节省比较可观的时间呀! 要不就像 kateboy (老公)由于设置了ADOConnection 的Attrib里中的自动事务处理。每当退出程序时就报错!从早上跑到各大BCB的QQ群中求人帮助,只到最后吃晚饭才惊奇发现了毛病所在! 还有一次不知那各BCB老大自报家丑 说自己吸了5包烟抓改BUG直到凌晨时分,方发现了它,原来是书写错误。
再者就是数据库的表名和字段名。在写数据库中,一般会这样写
ADOQuery->SQL->Text=”Select * From TabName Where Name=’wowo’ and sex=’b’”;
ADOQuery->FieldByName(“Sex”)->AsBoolean=true;
程序中到处都是这样写,数据库中的字段名一当改变。你得到处去修改,当然用BCB的查找功能帮一大忙,可是总有漏网之鱼吧! 而且BCB的语法检查不会到字苻串中,每当运行到该处时,虽然程序很明确的告诉你字段不存在,你也很清楚知道如何去修改。但找到它,再一次运行调试。可这段时间以及这时的心情就没有那么好了!每次放同样的错误,每次浪费同样的时间,虽然说少。可每天就8个小时的工作时间。这样频繁的浪费,心情一次比一次不好了,工作效率就越低,只好晚上加班继续干!若次次因为它要去加班,则那有时间去炮轰美媚啦!更不用说挤出点时间学习啦!身体也每况俞下!
解决办法就是使用个单元名为:DBStruct 。在该单元中用结构体来存放数据库的表名和字段。列如:typedef struct{ stirng Name; string sex;String TabName} MyTab;
MyTab m_dogTab;
ADOQuery->FieldByName(m_dogTab.Sex)->AsBoolean=true;
4 单元之间的引用
可以说单元其实就是类,虽然我们写类的时间较少。但TFORM就是个已经声明好的类,我们就给它添加功能就行了!类之间最好时少耦合,多内聚。最好不要在单元之间使用回调的功能和数据成员。直接使用函数和属性。
5命名
一般下的组件的命名是 Form1 è Frm_Main Edit1è Edt_Name 等 你也可以不缩写!
常用变量命名
全局变量
g_
常量
c_
c++类成员变量
m_
静态变量
s_
Int
_i
Long
_l
Float
_f
Doubl
_d
Strng
_s
Char
_c
Point
_p
Enum
_e
Struct
_t
Array
_a
Word
_w
Bool
_b
Hwnd
_h
其实不很长 无非是全局静态常量整形指针 gcs_ipMyAge; 一般情况下是 g_iMyAge 顶多三个或者是四个罢了!最重要的是能一眼区分出来!
6 注解:
我很反对注解占用一行,尤其是在代码头上,极大的防碍了阅读代码!
// 这是我写的 N年钱
adoquery->sql->text=sName;
为什么不这样了
adoquery->sql->text=sName; // 这是我写的 N年钱
当你看不懂代码时就向右看一看注解,就明白.
7 函数入口要检查参数.
除了入口的,还要对函数可以使用到的变量进行检查!否则的话!嘿嘿就不说啦!
8 后续 等我买了C++编码规范 熟读后 实践后 受到经验教训后 再把它写出来
其实自己也很少遵守纪律的,天天吃苦头。所以就要写出来,每天读一遍。
OK !到此为之 2004-5-28