一名Delphi程序员的开发习惯(非技术问题)

原创 2001年10月11日 21:50:00

 

 

 

 

  一名Delphi程序员的开发习惯(非技术问题)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

作者: Musicwind®

创建时间:2001-09-26

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

有关开发习惯的一些想法,如鲠在喉,不吐不快。究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些建议,或者参考(希望不是误人子弟)。同时,也希望各位能够就我的这些陋习,发表一点看法,给出批评和指正的意见。谢谢。

 

一.建立工程目录

       首先,第一步要做的,当然是给新项目建一个单独的目录(别笑)。目录名称与项目名称同名,或者另取一个也可,只要清楚、简练。然后,在此目录中创建以下各个目录:

       <Doc>:用来存放该项目相关的开发文档(需求说明,概要设计,详细设计等等等等);

       <Source>:用来存放Delphi源程序中的”.Dpr”,”.Pas”,”.Dfm”等文件;

       <Dcu>:该目录中存放”.Dcu”文件,将’.Pas’’.Dcu’文件分开存放只是为了让Source目录的内容更加清楚一些;

<Bin>:存放工程的输出文件,比如”.Exe”,”.Dll”或者”.Ocx”等等;

<Log>:用来存放日志文件;通常在这个目录中我会放一个”<项目名称>程序员日志.Txt”文件。

<Images>:当然是存放工程中用到的图片的目录了。一般情况下,这个目录是少不了的。假如还用到其他资源,那么也一样建立各自的目录,比如Wav,比如Avi等等。

 

二.设置工程选项

Delphi中创建一个新的工程,将此工程保存到Source目录中,同时:

a.       选一个耐看的,与项目有些联系的图标作为这个工程的图标。当然,这个图标可能只是临时用用的,但是总要比Delphi默认的那个难看的要好才行,要不然,怎么对得起自己?

b.       Project Options -> Directories/Conditionals页面中的Output Directory设置为Bin目录;

c.       Unit output Directory设置为Dcu目录。

 

三.添加常量单元

       添加一个新的Unit,另存为“unt<工程名> Consts.Pas”,用来保存工程中用到的常量。

 

四.有关窗体(Form)及单元(Unit)

按照匈牙利命名法则给Form命名,则一个用来登录的窗体可以命名为’FrmLogin’,而其单元名可以为’untLogin’。通常,两个对应的FormUnit的名称在除去’Frm’’unt’的缩写后应当保持一致。

Unit的头部添加本单元的注释,注释的格式可以参照Delphi的源码,但是至少应当包含以下几项:功能描述;作者;版权;创建时间;最后修改时间;修改历史等等。

将新创建好的FormCaption设置为该Form类的名称,而不是使用Delphi默认的。比如,将Form1更名为FrmLogin后,此时我们获得了TFrmLogin这个新的窗体类,并且Delphi自动将窗体的Caption更新为’FrmLogin’。依我看,该Caption应当为’TFrmLogin’才是,因为我们在设计的是一个窗体类TFrmLogin,而不是仅仅对FrmLogin进行操作。

TFrmLogin这样功能明确的窗体类,许多人都有在设计期就将其Caption设置为诸如“操作员登录”这种名称的习惯。我的习惯是,象“操作员登录”这样的常量,通常存放在unt<工程名>Consts.Pas中,用ResourceString来定义,或者用Const来定义。至于窗体的Caption的命名,应当属于运行期的工作。所以,我往往在TForm.OnCreate事件触发之时才对Caption进行操作,比如:

procedure TFrmLogin.FormCreate(Sender: TObject);

begin

       Caption := csLoginTitle;

       ....

end;

 

五.关于Format函数的使用

       iYeariMonthiDay三个数据,要显示诸如“生日:1976/3/18”这样的信息,你通常怎么做?使用s := ‘生日:’+IntToStr(iYear)+’.’+IntToStr(iMonth)+’.’+IntToStr(iDay); 吗?这样实在是太累了。我的习惯是,在unt<工程名>Consts.Pas中增加一个常量csBirthDayFormat = ‘生日:%d/%d/%d’来保存显示格式,然后使用s := Format(csBirthDayFormat, [iYear, iMonth, iDay]);这样的语句完成数据的拼装。这么做的好处显而易见,那就是你只需在一个地方维护数据的显示格式。

       Format函数功能强大,我对它很是推崇,你呢?

 

六.关于注册表或者Ini文件的存储

原先访问注册表我通常使用TRegistry,而访问Ini文件通常使用TIniFile。这两个类的使用方法各不相同,因此想要使用相同的代码既能访问注册表又能访问Ini文件几乎是不可能的。真头疼啊!

终于我发现了救星!那就是TRegistryIniFile类。查看Registry单元,我们发现,TRegistryIniFile继承自TCusomIniFile。而TIniFile也是继承于TCusomIniFile。因此,使用抽象类TCusomIniFile来实现对注册表或者Ini文件的访问便是一举两得了。比如:

var

  csmIniFile: TCusomIniFile;

begin

  if blUseIniFile then//如果使用Ini文件

    csmIniFile:= TIniFile.Create(csRootKey)

  else

    csmIniFile:= TRegistryIniFile.Create(csRootKey);

  //接着就可以使用csmIniFileIni文件进行访问,

//或者用类似访问Ini文件的方式访问注册表。

 

七.关于TStream流以及TFileStreamTMemoryStream等等

       TFileStreamTMemoryStream都继承自抽象类TStream,这意味着我们可以使用一套代码完成对文件和内存的存取操作。因此,定义一些接口的时候,我往往倾向于将参数的类型定义为抽象类,而不是具体类。比如,要完成保存功能的一个函数,定义成

function Save(AStream: TStream): Boolean

就比定义成

function Save(AStream: TFileStream): Boolean

要灵活的多。

前一个定义是具有前瞻性的,因为它可以适用于以后可能出现的新型态的流。而后一个定义只适用于TFileStream这种流(当然包括TFileStream的子类),呆板多了。

我的习惯:如果存在抽象类,那么尽量将参数定义为抽象类的类型,毕竟,我们无法预见未来。

 

八.多使用TAction

       Delphi 4以后引入了Action的概念,并且在Standard组件栏中增加TActionList组件。使用Action的好处是,控件状态同步的烦恼从此一扫而空!

        更多文章

 

Musicwind®@HangZhou.Zj.China

[转帖]一名Delphi程序员的开发习惯(非技术问题)

 [转帖]一名Delphi程序员的开发习惯(非技术问题)有关开发习惯的一些想法,如鲠在喉,不吐不快。究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些建议,...
  • xieyunc
  • xieyunc
  • 2009年05月02日 10:32
  • 895

一名Delphi程序员的开发习惯

一.建立工程目录   首先,第一步要做的,当然是给新项目建一个单独的目录(别笑)。目录名称与项目名称同名,或者另取一个也可,只要清楚、简练。然后,在此目录中创建以下各个目录:   :用来存放该项目相关...
  • pmj888666
  • pmj888666
  • 2009年12月26日 17:48
  • 106

Delphi程序员的开发习惯

有关开发习惯的一些想法,如鲠在喉,不吐不快。究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些建议,或者参考(希望不是误人子弟)。同时,也希望各位能够就我的...
  • sourcepp
  • sourcepp
  • 2007年10月30日 13:47
  • 282

学习笔记之《高效程序员的45个习惯》

有本关于敏捷开发方面的书非常不错《高效程序员的45个习惯-敏捷开发修炼之道》,Venkat Subramaniam和Andy Hunt著,该书简短、易读、精炼、深入,深刻且实用。对于想要采用敏捷方法的...
  • Jerry_1126
  • Jerry_1126
  • 2015年04月25日 21:29
  • 2447

优秀程序员所具备的7个好习惯

当我们被采访的时候,常常会问及这样一个问题——一个伟大的程序员需要具备哪些特质。大多数人回答的是逻辑、机智、耐心以及勤奋。对于这个问题,其实并没有标准答案,但是除了这些特质,习惯也是非常重要的因素。而...
  • hephec
  • hephec
  • 2014年10月24日 09:50
  • 572

『高效程序员的45个习惯:敏捷开发修炼之道』读书笔记

这是我近些日子的读书笔记。 电子书见:http://www.amazon.cn/mn/detailApp?asin=B00ALPRKJ8&tag=baiduiclickcn-23&ref=p...
  • sharetop
  • sharetop
  • 2014年10月20日 15:46
  • 1221

辞职的程序员那些事儿

最近大家谈到的投简历、面试的话题很多。事实上辞职也有很多话题,也能让我们进行深刻思考。请看以下”辞职的程序员那些事儿“  一、类型1有个工作了1年不到的程序员提交了辞职报告我作为HR简单询问理由(实际...
  • shenyisyn
  • shenyisyn
  • 2013年06月02日 15:02
  • 14679

程序员,你是否有编写软件工程文档的习惯?

          针对大多数程序员没有编写软件工程文档的习惯,专门写了一篇阐明软件工程文档重要性的文章,里面所有实例都是本人所在公司曾经发生的事情,事实上里面所提到的现象在软件工程相关领域里面都有专...
  • ITuring
  • ITuring
  • 2007年05月06日 22:02
  • 2124

程序员应该具备的十个代码习惯

程序员是一群艺术家,用代码创作项目,向用户展示流畅而友善的体验。 程序员境界:烂、低调、业余、普通、胜任、知名、成功、不朽,这是八个等级。 前几种不需要讲,工作中不会碰到,公司招聘也只会从普通程序员开...
  • liuxian13183
  • liuxian13183
  • 2015年05月14日 10:44
  • 5285

面试中经常遇到的问题(非技术)

面试中经常遇到的问题   1、请你自我介绍一下你自己  回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包...
  • qq_34543438
  • qq_34543438
  • 2017年05月29日 13:24
  • 402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一名Delphi程序员的开发习惯(非技术问题)
举报原因:
原因补充:

(最多只允许输入30个字)