Delphi接口单元的命名规范

3

是否存在一种广泛使用的命名约定,用于仅包含接口定义的Delphi单元?

我特别想知道是否存在在Delphi社区中已经成为广泛共识的命名约定。我不是在询问您对良好约定的看法,甚至不一定是您个人使用的约定。您的答案需要证明所描述的是一种广泛共识,说明您在哪里见过它。

为了更清楚地阐述问题,我将描述我们组织的自制约定以及我对其不满意的原因:如果一个类被称为TFoo,那么它的单元应该被称为uFoo。由TFoo实现的接口可能被称为IFoo,但显然我不能将此单元保存为iFoo,因为接口已经使用了这个名称。

换句话说,我正在尝试完成这个表格:

+--------+---------------+---------------+
!        !  Class        !  Interface    !
+--------+---------------+---------------+
!        !               !               !
! Name   !  TFoo         !  IFoo         !
!        !               !               !
+--------+---------------+---------------+
!        !               !               !
! File   !  uFoo.pas     !  ????.pas     !
!        !               !               !
+--------+---------------+---------------+

2014年3月19日更新,更明确地说明我正在寻找基于事实而非观点的答案。


2
我使用uIFoo.pas约定。例如,对于IModalForm接口,使用uIModalForm等。 - rsrx
2
我认为这并不简单。你所有的单元都只有单一类和接口吗?真的吗?你的类从未实现过多个接口吗?真的吗?你从未有一个接口被多个类实现吗?真的吗? - David Heffernan
3
Delphi开发人员的习惯和数量一样多。现代Delphi版本支持使用点符号在单元名称上进行伪命名空间,例如System.Classes、System.SysUtils等。个人而言,我按照以下格式对所有单元进行命名:CompanyName.ProductName.Topic.Subtopic。请注意,这只是我的个人偏好。 - Anders E. Andersen
2
你必须等待四个人发表他们的意见/自己的约定来告诉他们你对任何事情都不感兴趣吗? - Sertac Akyuz
2
我并不是特别针对某个人。只是看到这个被投票和封存的有效问题,觉得有必要写点什么。这应该是人们交流经验的地方,而不是等待机会来投票/关闭任何稍微偏离规则的问题。至少我是这样认为 Stack Overflow 的。但显然我在这里是少数派。 - rsrx
显示剩余15条评论
4个回答

2

我会使用Foo_Intf作为文件名。我看到RemObjects在自动生成单元时使用它。我认为我与之合作过的程序员是从RO那里学来的,而我也从他们那里学到了。对我来说这很有意义,因为它使查找接口变得很容易。


2

我会使用uFooAPI.pas来声明抽象接口的单元,这是我自己的约定。


1
据我所知,单位的命名约定不存在。
但是让我们看看我们试图通过接口做些什么。
如果我们有一个接口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

我以为有人会给出这样的答案。是的,我完全同意这种观点。但并不总是有多个类实现接口。有时我们为特定类创建接口(而不是相反)。这就是我的现有命名约定失效的地方。 - Ian Goldby
1
不管有多少个类实现了这个接口都没关系。但我知道你的情况。通常会有一个类,同时你会为它声明一个接口。当我到达那个点时,我总是叹了口气,因为我没有为我的计划付出足够的努力,现在我必须重构它 :o) - Sir Rufo

0
Type of unit           prefix
general unit           u_
interface declaration  i_
form                   w_
data module            d_
frame                  wf_

这是我们内部的惯例,我不知道是否有其他人使用它。我从另一家被某个公司收购的公司带来了这个惯例到我的现任雇主,但我不认为他们仍在使用Delphi。如果他们仍在使用,他们可能仍在使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接