【问题标题】:Method naming convention方法命名约定
【发布时间】:2010-10-01 21:07:16
【问题描述】:

如果方法将类/结构作为输入参数,那么最好的命名方式是什么?

示例

class Person{}
class Address{}

class Utility{
  //name **style 1** - use method overloading
  public void Save(Person p){}
  public void Save(Address a){}

  *//name **style 2** - use unique names that define what they are doing
  //or  public void SavePerson(Person p){}
  //and public void SaveAddress(Address a){}*
}

我个人喜欢样式 1(使用语言功能 - 在这种情况下是重载)。 如果您喜欢样式 1,您能否指出任何“官方”文档,说明这是一个标准?

【问题讨论】:

  • 采用方法重载的样式 1
  • Matt - 我猜任何面向对象的语言。
  • 我认为 Oded 和 Fredrik Mork 的 cmets 都是有效答案

标签: coding-style standards


【解决方案1】:

我想说你的挑战不在于方法命名领域,而在于类型设计。负责保存 both Person 对象和 Address 对象的类型看起来像带有 more than one responsibility 的类型。这样的类型将趋于增长,增长和增长,最终将难以维持。如果您改为创建更专业的类型,方法命名可能会自动成为一项更简单的任务。

如果您仍想在同一类型中收集这些方法,则主要是样式问题。可能要考虑的一件事是这种类型是否可以被用另一种语言编写的代码使用,并且不支持方法重载。在这种情况下,较长的名称是要走的路。否则,请坚持感觉最好的方式(或您工作场所的主流惯例)。

【讨论】:

  • Fredrik,我想到的场景是当您的业务实体不知道它们是如何被水合或持久化时。相反,DAL 负责水合和持久化实体(来自 Web 服务或数据库或本地文件系统)。在这种情况下,DAL 将具有保存方法。
  • Fredrik,一个类可能最终使用此类方法的另一种情况是负责业务实体和数据传输对象之间的转换(例如从 Web 服务到业务实体的对象,反之亦然)。
  • @Rajah:在这种情况下,我通常会为不同类型的对象(例如PersonRespositoryAddressRepository,...)提供存储库类。这样的存储库可以包含为每种类型的对象获取和存储数据的必要方法。这意味着(除其他外)如果您需要更改另一种类型的存储代码,负责一种类型对象的类型保持不变;可能更健壮的代码以及更小的存储库单元。
【解决方案2】:

这是风格问题。

如果您不喜欢长方法名,请使用 1。

如果您不喜欢冗长的重载列表,请使用 2。

重要的是要保持一致,所以不要在一个项目中混合两种样式。

如果您发现您有很多这样的方法,您可能需要重新考虑您的设计 - 也许涉及继承的解决方案会更合适。

【讨论】:

    【解决方案3】:

    不同的名称完全避免了与方法重载相关的任何问题。例如:

    • 如果参数的类型与多个候选者匹配,则可以避免歧义。
    • 在 C++ 中,重载方法可以隐藏超类中的同名方法。
    • 在 Java 中,类型擦除可防止仅因类型参数化而不同的重载方法。

    还有必要问一下是否可以使用多态性来代替重载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-31
      • 2012-12-13
      • 2016-12-29
      • 1970-01-01
      • 2021-12-24
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多