Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 很长的类名_Oop_Naming Conventions - Fatal编程技术网

Oop 很长的类名

Oop 很长的类名,oop,naming-conventions,Oop,Naming Conventions,我尽量准确地命名一个类(还有成员、属性等等)。但有时我不确定如果类名变大(50个字符或更多),这是否明智。处理是如此的不舒服,代码变得难以阅读 这个问题很少出现在我身上,因此我没有太多使用这么长名字的经验,但有时(现在)会出现。其他人是怎么处理的?你有没有一个大概的上限,然后用缩略语,或者你是否值得为处理这么长的名字而付出痛苦 更新 根据这里的要求,我们可以举一个这样长的类名的例子 ProjectContractChargingPeriodProjectAccountReferenceVM 第

我尽量准确地命名一个类(还有成员、属性等等)。但有时我不确定如果类名变大(50个字符或更多),这是否明智。处理是如此的不舒服,代码变得难以阅读

这个问题很少出现在我身上,因此我没有太多使用这么长名字的经验,但有时(现在)会出现。其他人是怎么处理的?你有没有一个大概的上限,然后用缩略语,或者你是否值得为处理这么长的名字而付出痛苦

更新

根据这里的要求,我们可以举一个这样长的类名的例子

ProjectContractChargingPeriodProjectAccountReferenceVM
第一个项目代表域,可以省略它,因为名称空间已经暗示它处理项目。问题是,如果我用这个类名做这件事,那么我必须用这个名称空间的所有类做这件事,而我肯定不喜欢这样做,因为这样这个名称空间的许多(短)类名将失去它们的表达能力。 [Project]ContractChargingPeriod描述对象,该类用于和ProjectAccountReference表示该类是对
ProjectAccount
的引用。ProjectAccount的问题与ProjectContract的问题相同。仅使用Account没有意义,因为应用程序中还存在其他Account类。引用有点弱,因为实际上它不仅仅是一个引用,但这是通用的。VM是我经常使用的缩写,它代表ViewModel。我认为这是合法的,因为与WPF合作的每个人都知道VM的含义

我不得不说,这个类是用来包装一个ORM类的,ORM是用我很久以前创建的旧工具构建的。那里的类代表了ERM的准1:1,我知道这不是最优的,但改变它将是一项重大的努力。

(我使用Java/C++,并使用过其他OO语言,但没有使用C,我在这里所说的几乎适用于我使用过的所有语言)

我使用描述性的类名。不过,我想我还没有达到50个字符:-) 一般来说,长类名称不是公共的,通常隐藏在接口和工厂后面。接口的名称比类短得多

您可以做的一件事是,假设您有许多密切相关的长命名类,将它们放入一个包中。发现这一点的一种方法是,如果所有类都有相同的前缀词。如果有许多类都以相同的名称开头,那么名称应该是一个包

你有大概的上限吗 然后做缩略语,还是 值得这么长时间的痛苦 名字

都不是。除了非常熟悉的URL或HTTP以外,没有缩写。也许对于范围很小的局部变量。否则,请仔细考虑如何获得既具有描述性又不太长的名称(我认为任何超过30个字符的名称都太长)


通常,长名称包含可以忽略的冗余或无关信息。例如,不要将上下文中已经提供的信息放在其中(例如,成员名称中已经存在于类名中的信息)。并避免使用诸如“数据”、“信息”、“处理程序”、“管理器”、“助手”、“计算”、“处理器”之类的不明确的填充词——它们描述了几乎所有的代码,因此不包含任何真实的信息(其中一些反映了过程概念,并且几乎只是一种代码味道)


请参阅以了解更多详细信息(抱歉,我很忙^^)。

50个字符正在推动类名的大端,但这并非不可想象。就Java而言,完全限定类名(包括包)的最大限制是

在野外,Spring库因长类名而臭名昭著。例如,该类包含49个字符。这提供了SpringBean注入的单元测试(
SpringContextTests
);数据源注入(
DataSource
);测试是事务感知的(
Transactional
);所讨论的类是抽象类(
abstract

试图将其压缩到不到49个字符将是一个挑战。这个信息可以在文档中提供,但是对于使用/扩展这个类的类来说,这个信息不是很明显。这可能会降低开发人员对阅读单元测试的理解,因此这里肯定有一个权衡,您必须考虑

其他人是怎么处理的?你有没有一个大概的上限,然后用缩略语,或者你是否值得为处理这么长的名字而付出痛苦

一个类应该代表一种类型的事物:它是一个名词(不是动词,当然也不是一个完整的句子)

我喜欢用一两个词来描述我的东西,也许三个:一个名词,或者一个复合名词(比如德语),或者一个形容词和一个名词

例如,下面是我在一个项目中的一些类的列表:

Ancestors.cs
Block.cs
BlockCollection.cs
BlockDocument.cs
BlockInline.cs
BlockInlineText.cs
BlockListBullet.cs
BlockListItem.cs
BlockP.cs
BlockSequence.cs
BlockTable.cs
BlockText.cs
BlockTextParent.cs
Border.cs
BorderEdges.cs
Box.cs
Canvass.cs
CaretLocation.cs
CaretLocationAndNode.cs
CaretLocationAndPoint.cs
CaretLocationData
CaretLocationPair.cs
CaretLocationPairAndPoint.cs
CaretsInBlock.cs
DebugDumpDom.cs
DebugOutput.cs
Display.cs
Displayed.cs
DocumentHandle.cs
DomDocument.cs
DomDocumentFragment.cs
DomElementBody
DomElementHandle.cs
DomElementTag.cs
DomEvent.cs
DomList.cs
DomNode.cs
DomNodeChild.cs
DomRange.cs
DomRangeBase.cs
DomTextBody.cs
DomTextHandle.cs
Edge.cs
Editing.cs
EditingState.cs
Editor.cs
EditorAction
EditorActions
EditorMutations.cs
EditorTransaction
EventListeners.cs
ExtractedRangeInDomDocument.cs
ExtraDebugInformation.cs
FormControl.cs
... etc ...
如您所见,大多数类名只是两个单词(复合名词)

我还使用名称空间将类划分为不同的类别和不同的项目(这有助于缩短类的名称:因为部分或大部分层次结构信息位于名称空间名称中,而不是类名中)


如果幸运的话,类名在前几个字母之后是唯一的或几乎是唯一的:因此,如果我输入前几个字母,我就可以使用Intellisense选择特定的类。因此,我不需要使用缩写。

关于
ProjectContractChargingPeriodProjectAccountReferenceVM
的示例,您可以将其重构为如下内容:

namespace Project
{
  public class ContractChargingPeriod implements IAccountReference
  {
    ...
  }

  public interface IAccountReference
  {
    ...
  }
}
ContractChargingPeriod