【问题标题】:Naming convention for Delphi Interface Units [closed]Delphi 接口单元的命名约定
【发布时间】:2014-03-18 17:01:39
【问题描述】:

对于仅包含接口定义的 Delphi 单元是否有广泛使用的命名约定?

我特别想问是否存在任何已成为 Delphi 社区普遍惯例的东西。我询问您对什么是好的约定,甚至是您个人使用的内容的意见。您的回答需要通过说明您在哪里使用过来证明您所描述的是一种普遍的惯例。

为了更清楚地说明这个问题,我将描述我所在组织的本土惯例以及我对它不满意的原因:如果一个班级被称为TFoo,那么它的单元将被称为uFoo。由TFoo 实现的接口可能会被称为IFoo,但显然我不能将此单元保存为iFoo,因为该接口已经具有该名称。

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

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

2014 年 3 月 19 日更新,更清楚地表明我正在寻找基于事实(而非基于意见)的答案。

【问题讨论】:

  • 我使用 uIFoo.pas 约定。例如用于 IModalForm 接口、uIModalForm 等
  • 我觉得没那么简单。您的所有单元中都有单一的类和接口?真的吗?您的类从不实现多个接口?真的吗?你从来没有一个由多个类实现的接口?真的吗?
  • 有多少 Delphi 开发者就有多少约定。我认为现代 Delphi 版本支持在单元名称上使用点符号的伪命名空间。像 System.Classes、System.SysUtils。等等。我个人根据这个方案命名我所有的单位 CompanyName.ProductName.Topic.Subtopic。
  • 您必须等待四个人发表他们的意见/他们自己的惯例才能表明您对任何一个都不感兴趣?
  • 我没有特别暗示任何人。只是认为这是一个有效的问题,被否决并搁置,这就是为什么我觉得有必要写点东西。这应该是人们可以交流经验的地方,而不是等待机会否决/关闭任何稍微违反规则的问题。至少我是这么看的。但显然我在这里是少数派。

标签: delphi interface naming-conventions


【解决方案1】:

我会使用 Foo_Intf 作为文件名。我见过 RemObjects 在自动生成单位时使用它。我认为和我一起工作的程序员是从 RO 那里学来的,我从他们那里学来的。这对我来说很有意义,因为它使查找接口变得容易。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      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

      【讨论】:

      • 我想有人可能会给出这样的答案。是的,我完全同意这种观点。但是,实现接口的类并不总是不止一个。有时我们为特定的类创建一个接口(而不是相反)。这就是我现有的命名约定失效的地方。
      • 实现这个接口的类有多少并不重要。但我知道你的情况。通常有一个类,并且一次您为此声明一个接口。当我到达那个点时,我总是会感叹,因为我没有为我的计划付出足够的努力,现在我必须重构它:o)
      【解决方案4】:
      Type of unit           prefix
      general unit           u_
      interface declaration  i_
      form                   w_
      data module            d_
      frame                  wf_
      

      (这是我们的内部约定,我不知道是否有其他人使用它。我将这个约定从另一家公司带到我现在的雇主那里,该公司被其他公司收购了,但我认为他们仍然不使用 Delphi。如果他们这样做了,他们可能仍然会使用它。)

      【讨论】:

        猜你喜欢
        • 2016-12-15
        • 2010-10-15
        • 2014-12-07
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        相关资源
        最近更新 更多