【问题标题】:Adding -Ex to the name of a type in .Net将 -Ex 添加到 .Net 中的类型名称
【发布时间】:2011-12-21 15:53:44
【问题描述】:

我最近在我们的代码库中注意到了一种模式,其中我们的大多数模型类都有一个名称,例如 User,并且有一个继承类型具有额外的字段,称为 UserEx。我在 C# 异步 CTP 中也注意到了这一点,他们将 Task 的附加静态方法放在一个名为 TaskEx 的类中(由于技术限制,因为它们无法更改现有库)。在与工作人员交谈时,我了解到存在 -Ex 类以优化网络传输(如果需要,您可以只提取最低限度的内容)。那么,我的问题是 -Ex 代表什么?我唯一能想到的可能是“额外”。

【问题讨论】:

  • 也可以是“扩展名”——在这个论坛上稍微搜索一下:stackoverflow.com/questions/3963374/…(虽然这是针对 Windows API,我假设人们从那时起就一直在使用命名约定)
  • 我将使用 Extended ,Micorosoft com 也使用这种表示法 :)
  • 这可能是他们命名约定的一部分,例如在工作中他们希望我们为我们编写的任何类添加前缀 clsSomeClasee.cs 是有意义的
  • 感谢@C.Evenhuis,扩展或扩展比额外更有意义。

标签: c# .net naming-conventions


【解决方案1】:

其他答案都正确:Ex 后缀代表“扩展”。这是一种在不淘汰或删除旧类或方法的情况下引入新类或方法的方法,这是一种在引入新功能的同时保持向后兼容性的常用方法。

here 所述,Windows API 无处不在。

Hans 在他的解释中暗示了这种方法的问题:它无法扩展。如果您想扩展“扩展”功能怎么办?你叫它FunctionExEx吗?这看起来很愚蠢。

事实上,微软自己的 .NET 编码指南(尽管是主观的)specifically recommend against appending Ex to a type 实在是太愚蠢了。相反,如果你必须这样做,你应该使用一个数字:

MyType
MyType2   // modified version
MyType3   // oh wait, we had to modify it again!

将这归咎于 dowhilefor 试图做的糟糕的计划有点为时过早。在编写现实世界的应用程序和框架时,您通常需要发布。这意味着要得到一个工作的函数的快速和肮脏的版本。后来,你认为这是一个糟糕的设计,需要改变一些东西。与其举手并完全重写(产生巨大的延迟并废弃所有旧代码),不如引入一种具有不同名称的新类型。事后诸葛亮总是 20/20。

【讨论】:

【解决方案2】:

Ex 中结束一个新的类或方法或类型是一种命名约定,并且与任何命名约定一样,它受制于实现它的人的心血来潮。

没有一成不变的规则,而且在类的末尾附加2(或Extra,或More,或DidntWantToMessWithThePublicApi)并不或多或少是正确的。

至于为什么使用它,Microsoft 长期以来一直使用它来提供对现有 API 的修订,而不会破坏旧代码。您可以找到 in classesin methodsin structures 的示例。您还可以找到不同的示例,which instead use 2

【讨论】:

  • 请注意,.NET 团队不再这样做/推荐这样做,部分原因是 Win32 团队遇到了问题。如果您想将某些东西“扩展”两次或三次,它根本无法扩展。
  • 哦,我同意,“它受制于实施它的人的心血来潮”。我不打算提供一致性建议。
【解决方案3】:

据我所知,它代表“扩展”或“扩展”。当您需要将功能添加到您无法更改的内容时,这是一个常见的后缀。一个很好的例子是 Win32 API 中的各种 -Ex 函数,因为 C 不支持函数重载而被添加。

【讨论】:

    【解决方案4】:

    这种做法不是行业标准。我承认我自己做的,但它主要是对一些旧的 win32 内核函数的残留仿真。例如,他们最初有一个“beginthread”C 函数,后来创建了另一个新的和改进的“begintreadEx”。

    我建议您开始使用 [Deprecated] 属性向其他编码人员(或您自己)发出信号,停止使用旧功能,转而使用新功能。这有更多的内在意义。

    长话短说——您应该根据类和函数的性质来命名它们,并尽量避免产生此类混淆的伪意义前缀/后缀。这是行业标准方法。

    【讨论】:

    • 如果两个函数 aredo [基本上] 相同的事情会怎样?在末尾附加一些东西是一种相当自我记录的方式,表明一个是第一个的扩展或修改版本。后缀在上下文中并非毫无意义。你会给BeginThreadEx取什么名字?
    • 在 C# 中,大多数时候你可以保留现有的方法名并创建一个新的重载(使用不同的参数)。
    • 我更喜欢 BeginThreadEx,因为至少它与其他 win32 内核函数是一致的。我的意思是我所说的作为指导方针,而不是硬性规则。我不认为有一个秘诀可以始终很好地命名函数,没有什么可以替代特别考虑您的特定函数 - 并认识到保持一致(即使不是行业标准)具有很大的价值。跨度>
    • @AlanR - 我们的代码库中的 -Ex 类不会弃用旧的类。相反,它们提供了扩展功能。正如我在原帖中所说,User 用于发送最低限度的信息,而 UserEx 用于在需要时发送更多信息。
    【解决方案5】:

    我认为可能:

    • 外部
    • 解脱
    • 简单地说“ex”(如“out of”或“beyond”)

    【讨论】:

    • 完成你的清单:替代过时的 - “我曾经约会classNameEx,现在我和className在一起”:P
    【解决方案6】:

    老实说,我认为它的意思是“我们没有计划这个功能足够长的时间,没有考虑更改的要求,我们现在必须在接近截止日期的时候处理这​​个问题”。当然,情况并非总是如此,但每次我找到一个带有 Ex 的类时,我都会试图弄清楚为什么它被引入并且没有正确地添加到框架中。对我来说,它大多像// HACK: 这仅适用于我们的代码,如果它在一个框架中,我“希望”这只是命名约定。 这可能意味着什么已经回答了,我的猜测总是“扩展”

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多