当前位置:  开发笔记 > 编程语言 > 正文

其他人发现命名类和方法是编程中最困难的部分之一?

如何解决《其他人发现命名类和方法是编程中最困难的部分之一?》经验,为你挑选了12个好方法。

所以我正在研究这个应该通过Web服务向供应商请求帮助文档的类.我试着将它命名DocumentRetriever,VendorDocRequester,DocGetter,但他们就是不健全的权利.我最终浏览了dictionary.com半小时,试图找出一个足够的词.

开始使用糟糕的名字进行编程就像是在早上有一个非常糟糕的发型日,其余时间从那里开始走下坡路.感觉到我?



1> TravisO..:

你现在正在做的很好,我强烈建议你坚持你现在的语法,是:

上下文+动词+如何

我使用此方法来命名函数/方法,SQL存储过程等.通过保持这种语法,它将使您的Intellisense/Code Panes更加整洁.所以你想要EmployeeGetByID()EmployeeAdd(),EmployeeDeleteByID().当您使用更加语法正确的语法(如GetEmployee(),AddEmployee())时,如果在同一个类中有多个Get,则会发现这会变得非常混乱,因为不相关的东西将被组合在一起.

我也喜欢用日期命名文件,你想说2009-01-07.log不是1-7-2009.log,因为在你有一堆之后,订单变得完全无用.


我更喜欢在命名方法时从类型名称推断出上下文... class EmployeeRepository {void Add(Employee employee); void Get(int id); void GetAll(); void GetAll(Action filter); } 你怎么看?
但是@TravisO,这听起来不太好.你没有员工,你得到一个员工.如果您有更复杂的动作涉及形容词,例如"InvalidateObsoleteQueries",该怎么办?`QueriesInvalidateObsolete`很难阅读,没有意义.此外,在C#中,特别是使用Resharper,字母顺序无关紧要.如果你开始输入"emp",Resharper会给你`GetEmployee`,`SetEmployee`,甚至是'PopulateInactiveEmployeesList`.
我喜欢你的建议的Intellisense效果,但我更喜欢一种稍微有点识字的方法.所以我更喜欢Employee.SetSupervisor()而不是Employee.SupervisorSet(),因为它读取(更像是自然英语.
如果你有一个标准的"house"动词列表,也会有所帮助.因此它总是获取而不是加载/读取/检索/选择/查找....等.
理查德你在OOP场景中是正确的,我的回答有点退缩,更多的是一般编码建议.我认为从技术上讲它更适用于非OOP语言.Employee.Add()和Employee.GetByID()将是OOP中的最佳用法.

2> Joel Spolsky..:

良好的命名约定应尽量减少可用于任何给定的变量,类,方法,或功能可能名称的数量.如果只有一个可能的名字,你将永远不会记住它.

对于功能和单班,我仔细检查功能来看看它的基本功能是变换一种东西变成另一种东西.我使用这个词非常松散,但你会发现,你写的基本上拿东西的一种形式,并产生另一种形式的东西的功能数量巨大.

在您的情况下,听起来您的类 Url转换为文档.想到这一点有点奇怪,但完全正确,当你开始寻找这种模式时,你会在任何地方看到它.

当我找到这个模式时,我总是将函数命名为x Fromy.

由于您的函数 Url转换为Document,我将其命名

DocumentFromUrl

这种模式非常普遍.例如:

atoi -> IntFromString
GetWindowWidth -> WidthInPixelsFromHwnd // or DxFromWnd if you like Hungarian
CreateProcess -> ProcessFromCommandLine

UrlToDocument如果您对该订单更满意,也可以使用.无论你说x Fromy还是y Tox都可能是一个品味问题,但我更喜欢这个From顺序,因为这样函数名称的开头已经告诉你它返回的是什么类型.

选择一个约定并坚持下去.如果您在x Fromy函数中使用与类名相同的名称,那么记住您使用的名称会更容易.当然,这种模式并不适用于所有事情,但它确实可以用来编写可以被认为是"功能性"的代码.


xFromY-Convetion基本上重复了返回类型和参数列表中的内容:Foo fooFromBar(条形栏).如果你称这种一致性或可靠性,这取决于你.
@Brian:它只在一个地方多余......在宣言中.在你使用它的任何其他地方,对数据类型进行一点提醒是很好的.使代码更具可读性,而无需返回声明.
@ stefan-在某些语言中,如C#和Java,所有代码都必须封装在一个类中,这与C++不同.如果你想要模块化的代码,函数不是这些语言中的一等公民.因此,有时你最终会遇到可能"做"像函数这样的事情的类.

3> Toon Krijthe..:

我学到的一个教训是,如果你找不到一个类的名字,那么这个类几乎总有问题:

你不需要它

它做得太多了


或者它确实太少了.
谢谢,这实际上与我有关.

4> Brad Barker..:

有时一个班级或方法没有一个好名字,它发生在我们所有人身上.但是,通常情况下,无法提出名称可能暗示您的设计出现了问题.你的方法有太多的责任吗?你的课程是否包含了一个连贯的想法?


非常好,真的.

5> krosenvold..:

线程1:

function programming_job(){
    while (i make classes){
         Give each class a name quickly; always fairly long and descriptive.
         Implement and test each class to see what they really are. 
         while (not satisfied){
            Re-visit each class and make small adjustments 
         }
    }
}

线程2:

while(true){
      if (any code smells bad){
           rework, rename until at least somewhat better
      }
}

这里没有Thread.sleep(...).


不错的一个伴侣:)

6> willcodejava..:

我花了很多时间,担心在编程时可以给出名字的任何名字.我会说它的回报非常好.有时当我被困住时,我会离开它一段时间,在喝咖啡休息时间,如果有人有好的建议,我会问一下.

对于你的课,我建议VendorHelpDocRequester.



7> Emile Vrijda..:

这本书代码完成由史蒂夫·麦康奈尔对命名变量/类/函数的非常好的章节/ ...


任何提到代码完成的人都要+1!

8> Nosredna..:

我认为这是副作用.

这不是真正的命名很难.命名过程让你面临一个可怕的事实,即你不知道自己到底在做什么,这很难.



9> Jonathan Sch..:

我昨天刚刚通过37Signals 的Signal vs. Noise博客听到了这句话,我当然同意这一点:

"计算机科学只有两件事:缓存失效和命名事物." - 菲尔卡尔顿



10> JW...:

很难,这很好.它迫使你去思考这个问题,以及这个班级实际应该做些什么.好名字可以帮助实现良好的设计.



11> Daniel Schaf..:

同意.我喜欢尽可能保持我的类型名称和变量的描述性,而不是太长时间,但有时只有一个概念,你找不到一个好词.

在这种情况下,它总是帮助我向同事请求输入 - 即使他们最终没有帮助,它通常帮助我至少大声解释并让我的车轮转动.



12> CaseySoftwar..:

我上个月刚刚撰写了命名惯例:http: //caseysoftware.com/blog/useful-naming-conventions

它的要点:

verbAdjectiveNounStructure - 结构和形容词作为可选部分

对于动词,我坚持使用动作动词:保存,删除,通知,更新或生成.有一段时间,我使用"进程"但只是专门引用队列或工作积压.

对于名词,我使用与之交互的类或对象.在web2project中,这通常是任务或项目.如果它是与页面交互的Javascript,它可能是正文或表格.关键是代码清楚地描述了它与之交互的对象.

结构是可选的,因为它的独特的情况.列表屏幕可能会请求列表或数组.web2project项目列表中使用的核心功能之一就是getProjectList.它不会修改基础数据,只会修改数据的表示.

形容词完全是另一回事.它们用作名词的修饰语.使用getProjects和switch参数可以很容易地实现像getOpenProjects这样简单的东西,但这往往会产生需要对对象的底层数据和/或结构有相当多了解的方法...不一定是你想要的东西鼓励.通过具有更明确和特定的功能,您可以使用它完全包装和隐藏代码中的实现.这不是OO的要点之一吗?

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有