标签: naming

命名类 - 如何避免将所有内容称为"<WhatEver> Manager"?

很久以前我读过一篇文章(我相信一篇博客文章),它让我在命名对象的"正确"轨道上:非常谨慎地命名程序中的东西.

例如,如果我的应用程序(作为一个典型的业务应用程序)处理用户,公司和地址我有一个User,一个Company和一个Address域类 - 可能在某个地方UserManager,一个CompanyManager和一个AddressManager会弹出来处理这些事情.

所以,你可以告诉那些UserManager,CompanyManagerAddressManager做什么?不,因为Manager是一个非常通用的术语,适用于您可以对域对象执行的任何操作.

我读过的文章建议使用非常具体的名称.如果它是一个C++应用程序并且该UserManager工作正在分配并从堆中释放用户,那么它将不会管理用户,而是保护他们的出生和死亡.嗯,也许我们可以称之为UserShepherd.

或者可能UserManager的工作是检查每个User对象的数据并以加密方式对数据进行签名.然后我们有一个UserRecordsClerk.

现在这个想法一直困扰着我,我尝试应用它.并且发现这个简单的想法非常难.

我可以描述这些类的功能和(只要我不进入快速和脏编码)我写的类只做件事.我想念从名称到名称的是一种名称目录,一种将概念映射到名称的词汇表.

最终,我想在我的脑海里有类似图案目录的东西(通常设计图案很容易提供对象名称,例如工厂)

  • Factory - 创建其他对象(从设计模式中获取命名)
  • 牧羊人 - 牧羊人处理物体的生命,它们的创建和关闭
  • 同步器 - 在两个或多个对象(或对象层次结构)之间复制数据
  • 保姆 - 帮助对象在创建后达到"可用"状态 - 例如通过连接到其他对象

  • 等等

那么,你如何处理这个问题呢?你有一个固定的词汇表,你是否动态发明新的名字,或者你认为命名的东西不是那么重要或错误?

PS:我也对链接​​到讨论这个问题的文章和博客感兴趣.首先,这是让我思考它的原始文章:在没有"经理"的情况下命名Java类


更新:答案摘要

以下是我在此期间从这个问题中学到的内容的一些总结.

  • 尽量不要创造新的比喻(保姆)
  • 看看其他框架做了什么

关于这个主题的进一步文章/书籍:

以及我从答案中收集的主观名称前缀/后缀的当前列表:

  • 协调员
  • 生成器
  • 作家
  • 读者
  • 处理器
  • 容器
  • 协议
  • 目标 …

oop naming design-patterns naming-conventions

1147
推荐指数
11
解决办法
20万
查看次数

垫片和填充物有什么区别?

两者似乎都在Web开发圈中使用,例如参见HTML5 Cross Browser Polyfills,它说:

所以我们在这里收集所有的垫片,后备和填充物......

或者,有es5-shim项目.

在我目前的项目中,我们使用了其中的一些,我想将它们全部放在同一目录中.那么,我该怎么称呼这个目录--- shims,或者polyfills

naming terminology vocabulary shim polyfills

382
推荐指数
6
解决办法
8万
查看次数

C#中变量名中@字符的用法/含义是什么?

我发现你可以用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#文档,但找不到任何相关信息.搜索谷歌也没有给我任何有用的答案.那么变量/属性名称中'@'字符的确切含义或用法是什么?

c# naming specifications

291
推荐指数
6
解决办法
4万
查看次数

238
推荐指数
2
解决办法
6万
查看次数

Android - 包名称约定

对于android.com中的"Hello World"示例,包名称为
"package com.example.helloandroid;"

是否有任何指南/标准来命名这个包?(参考会很好)

android naming

192
推荐指数
5
解决办法
23万
查看次数

"解析"的反义词是什么?

我有一个函数parseQuery,它将SQL查询解析为该查询的抽象表示.

我即将编写一个函数,它接受一个查询的抽象表示并返回一个SQL查询字符串.

我该怎么称呼第二个功能?

language-agnostic parsing naming semantics

147
推荐指数
20
解决办法
3万
查看次数

尝试导入时,可以在Python文件中使用破折号吗?

基本上我有一个python文件,如:

python-code.py
Run Code Online (Sandbox Code Playgroud)

并使用:

import (python-code)
Run Code Online (Sandbox Code Playgroud)

解释器给我语法错误.

关于如何修复它的任何想法?破折号是否在python文件名中是非法的?

python naming

132
推荐指数
6
解决办法
6万
查看次数

为什么我们在循环中使用i作为计数器?

我们为什么要使用

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为笑话的目的)将是一个整数.

原来的说法似乎是:"上帝是真实的,除非宣布整数".向所有人在博士论文中引用我的道歉.

variables naming loops

91
推荐指数
0
解决办法
5320
查看次数

在方法名称中使用"Async"后缀是否取决于是否使用了"async"修饰符?

使用"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)

.net c# naming naming-conventions async-await

90
推荐指数
7
解决办法
3万
查看次数

命名类的最佳方法是什么?

提出好的,准确的课程名称是众所周知的困难.如果做得好,它会使代码更加自我记录,并提供一个词汇表来推断更高抽象级别的代码.

实现特定设计模式的类可以根据众所周知的模式名称(例如FooFactory,FooFacade)给出一个名称,直接模拟域概念的类可以从问题域中获取它们的名称,但是其他类呢?当我缺乏灵感,并且想避免使用泛型类名(如FooHandler,FooProcessor,FooUtils和FooManager)时,有什么类似于程序员的词库吗?

naming

87
推荐指数
5
解决办法
4万
查看次数