很长的班级名称

HCL*_*HCL 21 oop naming-conventions

我尝试尽可能准确地命名一个类(也是成员,属性等).但有时我不确定如果类名变大(50个字符以上),这是否如此聪明.处理是令人不舒服的,代码变得难以阅读.

这个问题很少发生在我身上,因此我没有太多使用这么长的名字的经验,但不时(现在)它会发生.其他人如何处理这个?你有一个近似的上限,然后做缩写或是否值得痛苦处理这么长的名字?

更新

这里要求这样一个长类名称的例子.

ProjectContractChargingPeriodProjectAccountReferenceVM
Run Code Online (Sandbox Code Playgroud)

第一个Project表示域,可以省略它,因为命名空间意味着它已经处理了项目.问题是,如果我用这个类名做这个,那么我必须用这个命名空间的所有类来完成它,并且我明确地不喜欢,因为这个命名空间的许多(短)类名将丢失它们表现力. [Project] ContractChargingPeriod描述了对象,这个类用于和ProjectAccountReference意味着该类是对a的引用ProjectAccount.使用ProjectAccountProjectContract的问题相同.仅使用帐户没有意义,因为在应用程序中还存在其他帐户类.该参考有点弱,因为实际上它只是一个参考,但这是一般目的.该虚拟机是一个缩写,我一直用它代表视图模型.我认为这是合法的,因为与WPF合作的每个人都知道VM意味着什么.

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

Tof*_*eer 15

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

我使用描述性的类名.我认为我没有达到50个字符:-)通常长类名不公开,通常隐藏在界面和工厂后面.该接口的名称比类短得多.

你可能会做的一件事是,假设你有许多密切相关的长命名类,将它们放入一个包中.发现这种情况的一种方法是,所有类都具有相同的前缀字.如果有许多类都以相同的名称开头,那么也许名称应该是一个包.


Mic*_*rdt 10

你有一个近似的上限,然后做缩写或是否值得痛苦处理这么长的名字?

都不是.没有缩写,除了URL或HTTP之类的非常好的知识.也许对于范围非常小的局部变量.否则,要更加思考如何获得既具有描述性又不长的名称(我会说超过30个字符的名字太长).

通常,长名称包含可以省略的冗余或不相关的信息.例如,不要在那里放置已经从上下文提供的信息(即成员名称中已经存在于类名中的信息).并避免使用"数据","信息","处理程序","管理器","帮助程序","计算","处理器"等非特定填充词 - 它们几乎描述了所有代码,因此不包含任何实际信息(以及它们反映了程序性概念,几乎就是代码的味道.

  • +1 表示没有缩写词/首字母缩略词。使用域缩写或首字母缩略词是额外的沟通障碍,并使理解对象模型变得更加困难。弊大于利。 (2认同)

Che*_*ech 7

每次你对你的长名字感到不舒服时,试着看这堂课5秒以上。我给你:

还有它的大姐姐:

不要难过,名字应该是不言自明的,所以只要你的类名比它包含的代码短,我认为我们都很好。

  • 只要你的类名比它包含的代码短 - :-( (2认同)

Chr*_*isW 5

其他人如何处理这个?你有一个近似的上限,然后做缩写或是否值得痛苦处理这么长的名字?

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

我喜欢用一两个词来形容我的东西,也许三个:只有一个名词,或复合名词(如德语),或者可能是一个形容词和一个名词.

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

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 ...
Run Code Online (Sandbox Code Playgroud)

如您所见,大多数类名只是两个单词(复合名词).

我还使用命名空间将类分成不同的类别和不同的项目(这有助于保持类的名称更短:因为一些或大多数分层信息在命名空间名称中,而不是类名称).

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

  • +1引入许多类没有任何问题,只要它在您的域中有意义.我宁愿有一个`AmountAndCurrency`类而不是两个描述产品价值的独立对象.`AmountAndCurrency`概念通常名为`Price`,但不是*all*有效的复合类都有自己的实际名称. (3认同)