项目开发规范.docx

上传人:b****6 文档编号:8437332 上传时间:2023-01-31 格式:DOCX 页数:53 大小:209.54KB
下载 相关 举报
项目开发规范.docx_第1页
第1页 / 共53页
项目开发规范.docx_第2页
第2页 / 共53页
项目开发规范.docx_第3页
第3页 / 共53页
项目开发规范.docx_第4页
第4页 / 共53页
项目开发规范.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

项目开发规范.docx

《项目开发规范.docx》由会员分享,可在线阅读,更多相关《项目开发规范.docx(53页珍藏版)》请在冰豆网上搜索。

项目开发规范.docx

项目开发规范

XXX项目开发规范

1.1命名规范

1.1.1各个子系统命名

将每个子系统建立为一个子空间,并且使用完整的英文单词为空间命名即可。

例如客户关系管理(CRM)子系统的空间就命名为“CRM”。

1.1.2表和字段命名

表和字段目前以SAPBusinessOne的表结构作为基础,直接使用原来的名称即可,不需要再进行命名。

1.1.3业务对象命名

1.综合

●业务空间

不使用任何前缀和后缀,直接命名。

例如客户关系管理(CRM)子系统的空间就命名为“CRM”。

●文件夹

不使用任何前缀和后缀,直接命名。

例如客户档案文件夹就命名为“CustomerArchives”。

●数据库

以“%DB”的格式命名。

例如协同系统数据库就命名为“CooperationDB”。

●资源集

以“%Lib”的格式命名。

例如客户档案资源集就命名为“CustomerArchivesLib”。

●窗体

以“%Form”、“%Dialog”的格式命名,视窗体的实际用途而定。

例如录入客户档案窗体就命名为“InputCustomerArchivesForm”,显示一个客户信息的弹出对话框就命名为“ShowCustomerArchivesDialog”。

●图标

以“Icon_%”的格式命名。

例如客户图标就命名为“Icon_Customer”。

●位图

没有命名规则,视实际情况而定。

●页眉页脚

没有命名规则,视实际情况而定。

●工具栏

以“%ToolBar”的格式命名。

例如打印工具栏就命名为“PrintToolBar”。

2.业务字典

●字段模板组

以“%Templets”的格式命名。

例如客户档案模板组就命名为“CustomerArchivesTemplets”。

●字段模板

以“%Templet”的格式命名。

例如客户档案模板就命名为“CustomerArchivesTemplet”。

●业务参数组

以“%Params”的格式命名。

例如客户档案参数组命名为“CustomerArchivesParams”。

●业务参数

不使用任何前缀和后缀,直接命名。

例如客户档案编号参数就命名为“CustomerArchivesID”。

●业务元素组

以“%Elements”的格式命名。

例如客户档案元素组就命名为“CustomerArchivesElements”。

●业务元素

不使用任何前缀和后缀,直接命名。

例如客户档案编号元素就命名为“CustomerArchivesID”。

●业务操作组

以“%Operations”的格式命名。

不使用任何前缀和后缀,直接命名。

例如客户档案操作组就命名为“CustomerArchivesOperations”。

●业务操作

不使用任何前缀和后缀,直接命名。

例如客户档案编号操作就命名为“CustomerArchivesID”。

3.业务信息

●业务信息

以“%Info”的格式命名。

例如客户档案信息就命名为“CustomerArchivesInfo”。

●表单文档

不使用任何前缀和后缀,直接命名。

如果单独是某种视图,可以在末尾加上视图类型名。

例如客户档案记录视图文档可以命名为“CustomerArchivesRecordView”;订单列表视图文档可以命名为“OrderGridView”。

●表格文档

以“%Sheet”的格式命名。

例如客户档案表格文档就命名为“CustomerArchivesSheet”。

●丰富文档

以“%Doc”的格式命名。

例如订单合同丰富文档就命名为“OrderContractDoc”。

4.业务功能

●业务功能

以“%Func”的格式命名。

例如客户档案功能就命名为“CustomerArchivesFunc”。

5.业务流程

●业务流程

以“%Proc”的格式命名。

例如订单流程就命名为“OrderProc”。

1.1.4业务组件命名

前缀

组件

BusinessForm

dsb

TDataSetBroker

ib

TInfoBroker

fb

TFuncBroker

ob

TOperationBroker

db

TDecisionBroker

dv

TDocView

dvb

TDocViewBar

dtnvg

TDataNavigator

dtedt

TDataEdit

dtlbl

TDataLabel

dtg

TDataGrid

dtcg

TDataCtrlGrid

dtcht

TDataChart

dtrv

TDataRecordView

dtdp

TDecisionPivot

dtdg

TDecisionGrid

dtdcht

TDecisionChart

dtlcb

TDataLocateComboBox

dttv

TDataTreeView

dtcdtv

TCodeDataTreeView

dtmddtv

TMDDataTreeView

btb

TBizToolBar

bimg

TBizImage

biml

TBizImageList

btv

TBizTreeView

blv

TBizListView

bcb

TBizComobBox

bcht

TBizChart

otv

TOrgTreeView

olv

TOrgListView

ocb

TOrgComboBox

ocht

TOrgChart

fcht

TFlowChart

bfcht

TBizFlowChart

bod

TBizOpenDialog

bsd

TBizSaveDialog

bbd

TBizBrowseDialog

bsld

TBizSelectDialog

fgv

TFlowGangttView

fpv

TFlowPertView

ftv

TFlowTrackView

psgg

TPSGanttGraph

pspg

TPSPertGraph

pspc

TPSPrjectCalendar

dtfp

TDataFilterPanel

dtbrs

TDataBrowser

BusinessModel

cnt

TConnection

tst

TTransation

ds

TDataSource

qry

TQuery

sds

TSQLDataSet

spds

TStoredProcDataSet

uds

TUserDataSet

dds

TDecisionDataSet

pds

TPiovtDataSet

ip

TInfoPolicy

1.1.5标准组件命名

前缀组件

mmTMainMenu

pmTPopupMenu

mmiTMainMenuItem

pmiTPopupMenuItem

lblTLabel

edtTEdit

memTMemo

btnTButton

cbTCheckBox

rbTRadioBox

lbTListBox

cbTComboBox

scbTScrollBar

gbTGroupBox

rgTRadioGroup

pnlTPanel

clTCommandList

bbtnTBitBtn

sbTSpeedButton

meTMaskEdit

sgTStringGrid

dgTDrawGrid

imgTImage

shpTShape

bvlTBevel

sbxTScrollBox

clbTCheckListbox

splTSplitter

stxTStaticText

chtTChart

tbcTTabControl

pgcTPageControl

ilTImageList

reTRichEdit

thrTTrackBar

prbTProgressBar

udTUpDown

hkTHotKey

aniTAnimate

dtpTDateTimePicker

tvTTreeView

lvTListView

hdrTHeaderControl

stbTStatusBar

tlbTToolBar

clbTCoolBar

tmTTimer

pbTPaintBox

mpTMediaPlayer

olecTOleContainer

1.2代码规范

1.2.1字母大小写

基本原则:

(1)标识符中所有单词首字母大写,包括单元名、函数/过程名、组件名、变量名

(2)表示类型的T和表示指针类型的P大写

例外情况:

(1)Delphi语言保留字完全小写,如:

string、if..then..else、begin..end等等

(2)表示组件类型的前缀小写,如:

frmMain、edtPassword

(3)表示变量类型的前缀小写,如:

iCol、bFileExist、sErrorMessage

表示枚举类型的前缀小写,如:

dsEdit、dsInsert

1.2.2过程/函数

命名规则:

应该以大写字母开头,应该尽量便于阅读,例如:

procedurethisisapoorlyformattedroutinename;//很难看懂

procedureThisIsMuchMoreReadableRoutineName;//很清楚的命名方式

子程序名应该具有与其用途相关的含义。

导致发生某动作的子程序应该以动词为前缀命名,例如:

procedureFormatHardDrive;

为输入参数赋值的子程序应该以Set为前缀命名,例如:

procedureSetUserName;

取回数值的子程序应该以Get为前缀命名,例如:

functionGetUserName:

string;

参数

格式

如果可能,同类型的参数应该在一条语句中说明:

procedureFoo(Param1,Param2,Param3:

Integer;Param4:

string);

命名

参数名称应该表明其用途和含义,适当情况下,参数名应该以字符A为前缀,例如:

procedureSomeProc(AUserName:

string;AUserAge:

integer);

使用前缀"A"是为了避免参数名与类的属性名、域名重复

1.2.3局部变量

简单类型的局部变量名称大写,例如:

I,J:

Integer;

对象类型的局部变量以字母l为前缀,表示local,例如:

lFont:

TFont;

1.2.4缩进

缩进应该是每行2个空格,不要在源文件中保存TAB字符。

1.2.5换行

页宽应该设置为80字符。

源代码一般不要超过这个宽度,以免导致无法完整显示(这一限制也可以灵活调整)。

超长的语句应该在逗号或者操作符之后折行,一条语句折行后,应该比原来的语句再缩进2个字符。

1.2.6begin..end对

begin语句应该单独作为一行。

例如,下面的第1行是错误的,第2行是正确的:

forI:

=0to10dobegin//错误,begin和for在同一行

forI:

=0to10do      //正确,begin单独作为一行

begin

当begin作为else子句的一部分时例外,例如:

ifsomestatement=then

begin

 ...

end

elsebegin

 SomeOtherStatement;

end;

end语句永远单独作为一行。

如果begin语句不是else子句的一部分,相应的end语句应该缩进到与begin对齐的位置

1.2.7括号

左括号与后一字符之间、右括号与前一字符之间都不应该出现空格,例如:

CallProc(AParameter);//错误

CallProc(AParameter);  //正确

不要在语句中使用无意义的括号,除非使用括号能增加程序的可读性,例如:

if(I=42)then            //错误-括号毫无意义

if(I=42)or(J=42)then//正确-的确需要括号

Result:

=(IndexOf(AString)<>-1)//增强程序的可读性

1.2.8if语句

if/then/else语句中最可能被执行的部分应该放在then子句中,不太可能被执行的部分应该放在else子句中。

如果可能,尽量不要使用一连串的if语句,而应该以case语句替代。

不要使if语句嵌套太多,尽量以更清楚的代码替代。

如果if语句中需要检测多个条件,则条件应该按照计算强度从小到大地排列。

这将使得代码执行的布尔计算更少,性能更高。

例如,如果Condition1比Condition2计算更快,Condition2比Condition3计算更快,那么if语句应该是如下结构:

ifCondition1andCondition2andCondition3then

1.2.9case语句

case语句中的单个子句应该以case常数的数字顺序或字母顺序排列。

子句中的执行语句应该尽量保持简单,一般不要超过4到5行代码。

如果执行语句过于复杂,应该将它放置在独立的过程或函数中。

case语句的else子句应该只在正常的默认情况或检测到错误的情况下使用。

1.2.10try..except/finally语句

不要在try..except块中使用else,因为else字句将阻塞所有的意外,包括没有准备处理的意外

不要在try块内部创建对象,例如:

try

AInstance:

=TObject.Create;

DoSomeThing;

finally

AInstance.Free;//将在编译期间产生警告信息,因为Create语句不一定执行成功

end;

应该修改为:

AInstance:

=TObject.Create;

try

DoSomeThing;

finally

AInstance.Free;

end;

1.2.11类

类的域变量应该以字母F为前缀,以便在引用时清楚地表明是域变量(Field)

1.2.12单元结构

单元遵循相同的命名原则,保证含义清楚,可读性好。

uses语句中应该尽量删除不必要的名空间,而且应该遵循以下顺序:

1、Business本身的名空间在前,第三方组件的名空间在后,自定义的名空间在最后。

2、通用单元在前,特殊单元在后

interface部分应该只包括可被外部单元访问的类型声明,变量声明,过程/函数的预先声明,等等。

本单元私有的的类型、变量、常数、函数/过程、类定义,等等应该在implementation部分定义。

1.2.13注释

单元接口部分的方法,及类中Public、Protected的部分的属性、方法都需要写上注释,说明方法、属性的用途、以及各个参数的确切含义。

如果可能,还可以包括简短的使用示例代码。

具体的参考实例如下:

{TRelevancyNavBar}

TRelevancyNavBar=class(TmxOutlookBarPro)

private

FAutoHide:

Boolean;

FDataSources:

TDataSources;

FOwnerFuncURL:

string;

functionGetRelevancyManager:

TRelevancyManager;

procedureDoButtonClick(Sender:

TObject);

procedureDoDataSetNotify(ABizDataSet:

TBizDataSet);

procedureDoDataSetActiveChanged(ABizDataSet:

TBizDataSet);

functionInternalAddHeader(constAHeaderCaption:

string):

TmxHeader;

functionInternalAddButton(AHeader:

TmxHeader;

constAButtonCaption:

string):

TmxButton;

functionAddIconToUserGraphics(constAIconURL:

string):

Integer;

functionElementAndValueExists(ABizField:

TBizField):

Boolean;

protected

procedureSetParent(AParent:

TWinControl);override;

{根据标题找到相应的Header}

functionFindHeaderByCaption(constAHeaderCaption:

string):

TmxHeader;virtual;

{根据标题获取相应的Header,和FindHeaderByCaption方法不同的是,找不到会创建一个新的返回}

functionGetHeader(ARelevancy:

TRelevancy):

TmxHeader;virtual;

{根据关联定义对象和数据集添加Button}

procedureAddButtonsByRelevancy(ARelevancy:

TRelevancy;ABizDataSet:

TBizDataSet);virtual;

{根据指定的关联定义对象刷新相应的Button}

procedureRefreshButton(ARelevancy:

TRelevancy);virtual;

{是否需要应用自动隐藏}

functionNeedAutoHide:

Boolean;virtual;

public

constructorCreate(AOwner:

TComponent);

destructorDestroy;override;

{装载关联定义}

procedureLoadRelevancys;

{根据数据集装载关联定义}

procedureLoadRelevancysByDataSet(ABizDataSet:

TBizDataSet);

{刷新关联定义}

procedureRefreshRelevancys;

{根据数据集刷新关联定义}

procedureRefreshRelevancysByDataSet(ABizDataSet:

TBizDataSet);

{刷新自动隐藏}

procedureRefreshAutoHide;

{根据关联对象找到相应的按钮}

functionFindButton(ARelevancy:

TRelevancy):

TmxButton;

{添加自定义的关联按钮}

functionAddCustomButton(constAHeaderCaption,AButtonCaption,

AHeaderIconURL,AButtonIconURL:

string):

TmxButton;overload;

functionAddCustomButton(constAHeaderCaption,AButtonCaption,

AButtonIconURL:

string):

TmxButton;overload;

functionAddCustomButton(constAHeaderCaption,

AButtonCaption:

string):

TmxButton;overload;

{自动隐藏}

propertyAutoHide:

BooleanreadFAutoHidewriteFAutoHide;

{关联数据源列表}

propertyDataSources:

TDataSourcesreadFDataSources;

{当前功能的URL}

propertyOwnerFuncURL:

stringreadFOwnerFuncURLwriteFOwnerFuncURL;

{关联管理器}

propertyRelevancyManager:

TRelevancyManagerreadGetRelevancyManager;

end;

1.3界面规范

1.3.1以用户为中心的设计原则

一个优秀的用户界面是建立在以用户和他们的任务为中心的原则和开发过程之上的。

1.用户控制

用户界面设计的一个重要原则是用户应该总是感觉在控制软件而不是感觉被软件所控制。

这个原则包含许多含义:

●操作上假设是用户——而不是计算机或软件——开始动作。

用户扮演主动角色,而不是扮演被动角色。

您可以自动执行任务,但要以允许用户进行选择或控制它的方式来实现该自动任务。

●因为用户的技能和喜好各不相同,因此他们必须能够个性化界面的某些方面。

Windows为用户提供了对许多这方面的访问。

您的软件应该反应不同的系统属性——例如颜色、字体或其他选项——的用户设置。

●您的软件应该尽可能是交互式并易感应的。

尽可能避免模式。

“模式”是一种状态,它排除一般的交互,或者限制用户只能进行特定的交互。

当最好使用一个模式或该模式只是可替换的设计时——例如,用于在一个绘图程序中选定一个特定感觉——请确保该模式是显然的、可见的,是一个明确的用户选定的结果,并且容易取消。

下面是一些用来保持应用程序的设计是交互式的其他建议方法:

●尽可能地使用“非模式”辅助窗口。

●划分进程,例如打印,这样您就不必加载整个应用程序来执行一个操作。

●在后台运行长进程,保持前台式交互式的。

例如,当正在打印一个文档,即使该文档不能被改变,用户也应该可以最小化该窗口。

2.直接

请仔细设计您的软件,以便用户可以直接处理信息的软件表示。

不管用户正在拖动一个对象以重新放置它,还是正在定位到文档中的一个位置,他们都应该在屏幕上看到他们的操作如何影响该对象。

可见的信息和选择还减少了用户在智力上的工作量。

用户可以比回忆命令的语法更容易地识别该命令。

熟悉的隐喻为用户的任务提供了直接而直观的界面。

通过允许用户利用他们的知识和经验,隐喻使得预测和学习基于软件的表示的行为更加容易。

在使用隐喻时,您不需要将基于计算机的实现局限在真实世界的对应物上范围之内。

例如,与其基于纸张的对应物不同,Windows桌面上的文件夹可以被用来组织各种对象,例如打印机、计算器、以及其他文件夹。

同样,Windows文件夹可以其真实世界对应物不可能的方式被排序。

在界面中使用隐喻的目的是提供一个认知的桥梁;隐喻并不以其自身为最终目的。

隐喻支持用户认知而不是记忆。

用户记起与一个熟悉的事物相关联的

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1