很久以前我读过一篇文章(我相信一篇博客文章),它让我在命名对象的"正确"轨道上:非常谨慎地命名程序中的东西.
例如,如果我的应用程序(作为一个典型的业务应用程序)处理用户,公司和地址我有一个User
,一个Company
和一个Address
域类 - 可能在某个地方UserManager
,一个CompanyManager
和一个AddressManager
会弹出来处理这些事情.
所以,你可以告诉那些UserManager
,CompanyManager
和AddressManager
做什么?不,因为Manager是一个非常通用的术语,适用于您可以对域对象执行的任何操作.
我读过的文章建议使用非常具体的名称.如果它是一个C++应用程序并且该UserManager
工作正在分配并从堆中释放用户,那么它将不会管理用户,而是保护他们的出生和死亡.嗯,也许我们可以称之为UserShepherd
.
或者可能UserManager
的工作是检查每个User对象的数据并以加密方式对数据进行签名.然后我们有一个UserRecordsClerk
.
现在这个想法一直困扰着我,我尝试应用它.并且发现这个简单的想法非常难.
我可以描述这些类的功能和(只要我不进入快速和脏编码)我写的类只做一件事.我想念从名称到名称的是一种名称目录,一种将概念映射到名称的词汇表.
最终,我想在我的脑海里有类似图案目录的东西(通常设计图案很容易提供对象名称,例如工厂)
保姆 - 帮助对象在创建后达到"可用"状态 - 例如通过连接到其他对象
等等
那么,你如何处理这个问题呢?你有一个固定的词汇表,你是否动态发明新的名字,或者你认为命名的东西不是那么重要或错误?
PS:我也对链接到讨论这个问题的文章和博客感兴趣.首先,这是让我思考它的原始文章:在没有"经理"的情况下命名Java类
以下是我在此期间从这个问题中学到的内容的一些总结.
关于这个主题的进一步文章/书籍:
以及我从答案中收集的主观名称前缀/后缀的当前列表:
两者似乎都在Web开发圈中使用,例如参见HTML5 Cross Browser Polyfills,它说:
所以我们在这里收集所有的垫片,后备和填充物......
或者,有es5-shim项目.
在我目前的项目中,我们使用了其中的一些,我想将它们全部放在同一目录中.那么,我该怎么称呼这个目录--- shims
,或者polyfills
?
我发现你可以用C#中的'@'字符开始你的变量名.在我的C#项目中,我使用的是用Java编写的Web服务(我添加了对我的项目的Web引用).WSDL中定义的一个接口对象有一个名为"params"的成员变量.显然,这是C#中的保留字,因此您不能拥有名为"params"的成员变量的类.生成的代理对象包含一个如下所示的属性:
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
Run Code Online (Sandbox Code Playgroud)
我搜索了VS 2008 c#文档,但找不到任何相关信息.搜索谷歌也没有给我任何有用的答案.那么变量/属性名称中'@'字符的确切含义或用法是什么?
对于android.com中的"Hello World"示例,包名称为
"package com.example.helloandroid;"
是否有任何指南/标准来命名这个包?(参考会很好)
我有一个函数parseQuery,它将SQL查询解析为该查询的抽象表示.
我即将编写一个函数,它接受一个查询的抽象表示并返回一个SQL查询字符串.
我该怎么称呼第二个功能?
基本上我有一个python文件,如:
python-code.py
Run Code Online (Sandbox Code Playgroud)
并使用:
import (python-code)
Run Code Online (Sandbox Code Playgroud)
解释器给我语法错误.
关于如何修复它的任何想法?破折号是否在python文件名中是非法的?
我们为什么要使用
for (int i = 0 ; i < count ; i++){ }
Run Code Online (Sandbox Code Playgroud)
为什么i
?
为什么不
for (int a = 0; a < count; a++){ }
Run Code Online (Sandbox Code Playgroud)
我这样做,你这样做,每个人都这样做,但是为什么?
*编辑
我发现了一个关于Fortran的古老谚语,它比正确的更有趣,它说"上帝是真实的,上面的其他一切都是整数".
"上帝"将是一个变量名称,g
因为它将在真实域中,而上面的所有其他内容(不包括h为笑话的目的)将是一个整数.
原来的说法似乎是:"上帝是真实的,除非宣布整数".向所有人在博士论文中引用我的道歉.
使用"Async"后缀方法名称的约定是什么?
"Async"后缀是否应仅附加到使用async
修饰符声明的方法?
public async Task<bool> ConnectAsync()
Run Code Online (Sandbox Code Playgroud)
或者该方法刚刚返回Task<T>
还是足够Task
?
public Task<bool> ConnectAsync()
Run Code Online (Sandbox Code Playgroud) 提出好的,准确的课程名称是众所周知的困难.如果做得好,它会使代码更加自我记录,并提供一个词汇表来推断更高抽象级别的代码.
实现特定设计模式的类可以根据众所周知的模式名称(例如FooFactory,FooFacade)给出一个名称,直接模拟域概念的类可以从问题域中获取它们的名称,但是其他类呢?当我缺乏灵感,并且想避免使用泛型类名(如FooHandler,FooProcessor,FooUtils和FooManager)时,有什么类似于程序员的词库吗?