对于仅包含接口定义的Delphi单元,是否有广泛使用的命名约定?
我具体询问是否存在任何已成为Delphi社区普遍惯例的内容。我不询问您对什么是一个好的约定,甚至一定是您个人使用的意见。你的回答需要证明你所描述的是一个广泛的惯例,说明你曾经看过它的用途。
为了更清楚地说明问题,我将描述我的组织的本土会议以及为什么我对此不满意:如果一个班级被称为TFoo
,那么它的单位将会被称为uFoo
。由TFoo
实现的界面可能会被称为IFoo
,但显然我无法将此单元保存为iFoo
,因为该界面已经具有该名称。
换句话说,我试图完成这个网格:
+--------+---------------+---------------+
! ! Class ! Interface !
+--------+---------------+---------------+
! ! ! !
! Name ! TFoo ! IFoo !
! ! ! !
+--------+---------------+---------------+
! ! ! !
! File ! uFoo.pas ! ????.pas !
! ! ! !
+--------+---------------+---------------+
2014年3月19日更新,更清楚地表明我正在寻找基于事实的(不是基于意见的)答案。
答案 0 :(得分:2)
我会使用Foo_Intf作为文件名。我看到RemObjects在自动生成单位时使用它。我认为我工作的程序员从RO中选择了它,然后我从它们那里拿起它。这对我来说很有意义,因为它使得查找界面变得容易。
答案 1 :(得分:1)
我会将uFooAPI.pas
用于声明抽象接口的单元。这是我自己的惯例。
答案 2 :(得分:1)
AFAIK没有单位的命名惯例。
但是让我们来看看我们试图用接口做什么。
如果我们有一个接口IFoo
,我们将通过接口与Foo
的行为进行对话。实现IFoo
的每个类都不是Foo
,而的行为类似于Foo 。
对我来说,如果IFoo
只有一个单位,我会将此单位命名为Foo
。
unit Foo;
interface
type
IFoo = interface
['{GUID}']
procedure Bar;
end;
implementation
end.
也许有一个起始IFoo
实施类
unit AbstractFoo;
interface
uses Foo;
type
TAbstractFoo = class abstract( TInterfacedObject, IFoo )
public
procedure Bar; virtual; abstract;
end;
interface
end.
或使用IFoo
unit FooUser;
interface
uses Foo;
type
TFooUser = class
public
procedure Consume( Foo : IFoo );
end;
implementation
procedure TFooUser.Consume( Foo : IFoo );
begin
Foo.Bar;
end;
end.
大多数时候我们只使用接口而不是其中一个实现类,这使我再次命名接口声明单元Foo
。
答案 3 :(得分:0)
Type of unit prefix
general unit u_
interface declaration i_
form w_
data module d_
frame wf_
(这是我们的内部惯例,我不知道是否有其他人使用它。我把这个约定从另一家被其他公司收购的公司带到我现在的雇主,但我不认为他们仍然使用Delphi。如果他们这样做,他们可能仍然会使用它。)