Coding style 方法命名约定

Coding style 方法命名约定,coding-style,standards,Coding Style,Standards,如果一个方法将类/结构作为输入参数,那么最好的命名方法是什么 示例: 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

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

示例

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

如果你不喜欢长的重载列表,那么选择2

重要的一点是保持一致,因此不要在一个项目中混合使用这两种样式


如果您看到有许多这样的方法,您可能需要重新考虑您的设计——也许一个涉及继承的解决方案更合适

这是风格的问题

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

如果你不喜欢长的重载列表,那么选择2

重要的一点是保持一致,因此不要在一个项目中混合使用这两种样式


如果您看到有许多这样的方法,您可能需要重新考虑您的设计——也许一个涉及继承的解决方案更合适

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

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

询问是否可以使用多态性代替重载也是值得的。

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

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

询问是否可以使用多态性而不是重载也是值得的。

我想说,您的挑战不在方法命名领域,而是类型设计领域。负责保存
Person
对象和
Address
对象的类型看起来像是带有。这样的一种类型会不断增长,最终会变得难以维持。如果您改为创建更专门的类型,方法命名可能会自动变得更简单


如果您仍然希望在同一类型中收集这些方法,那么主要是风格问题。可能需要考虑的一件事是,这种类型是否会被用另一种语言编写的代码使用,而这不支持方法重载。在这种情况下,名字越长越好。否则,只需坚持感觉最好的方法(或者你工作场所的主流惯例)。

我想说,你的挑战不在方法命名领域,而在类型设计领域。负责保存
Person
对象和
Address
对象的类型看起来像是带有。这样的一种类型会不断增长,最终会变得难以维持。如果您改为创建更专门的类型,方法命名可能会自动变得更简单


如果您仍然希望在同一类型中收集这些方法,那么主要是风格问题。可能需要考虑的一件事是,这种类型是否会被用另一种语言编写的代码使用,而这不支持方法重载。在这种情况下,名字越长越好。否则,只需坚持感觉最好的(或者你工作场所的主流惯例).

选择带有方法重载的样式1 Matt-我想是任何面向对象的语言。我认为Oded和Fredrik Mork的评论都是有效的答案对于带有方法重载的样式1 Matt-我想是任何面向对象的语言。我认为Oded和Fredrik Mork的评论都是有效的答案Fredrik,我想到的情况是,当你的企业实体不知道它们是如何被水合或持久化的。相反,DAL负责水合和持久化实体(来自Web服务、数据库或本地文件系统)。在这种情况下,DAL将具有save方法。Fredrik,另一种情况是,一个类可能最终使用这种方法,即负责业务实体和数据传输对象(例如从web服务到业务实体的对象,反之亦然)之间的转换@Rajah:在这种情况下,我通常会为不同类型的对象(例如
PersonRespository
AddressRepository
,…)创建存储库类。这样的存储库可以包含获取和存储每种类型对象的数据所需的方法。这意味着(除其他外)如果需要更改另一种类型的存储代码,则负责一种类型对象的类型保持不变;可能会有更健壮的代码和更小的存储库单元。相反,DAL负责水合和持久化实体(来自Web服务、数据库或本地文件系统)。在这种情况下,DAL将具有save方法。Fredrik,另一种情况是,一个类可能最终使用这种方法,即负责业务实体和数据传输对象(例如从web服务到业务实体的对象,反之亦然)之间的转换@Rajah:在这种情况下,我通常会为不同类型的对象(例如
PersonRespository
AddressRepository
,…)创建存储库类。这样的存储库可以包含获取和存储数据的必要方法