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

2024-04-06

为类想出好的、精确的名称是出了名的困难。如果做得好,它可以使代码更加自我记录,并提供用于在更高抽象级别推理代码的词汇表。

实现特定设计模式的类可能会根据众所周知的模式名称(例如 FooFactory、FooFacade)来命名,而直接建模域概念的类可以从问题域中获取其名称,但是其他类呢?当我缺乏灵感并且想要避免使用通用类名(如 FooHandler、FooProcessor、FooUtils 和 FooManager)时,有没有类似程序员同义词库的东西可以参考?


我将引用一些段落实施模式 https://rads.stackoverflow.com/amzn/click/com/0321413091作者:肯特·贝克:

简单的超类名称

“[...] 名字应该简短而有力。 然而,为了使名称准确 有时似乎需要几个 字。摆脱这个困境的一个方法是 为之选择一个强有力的隐喻 计算。心里打个比喻, 即使是单个词也会带来 丰富的协会、联系网络, 和影响。例如,在 HotDraw绘图框架,我的第一个 绘图中对象的名称是绘图对象。沃德·坎宁安来了 连同排版隐喻: 绘图就像印刷的、排版的 页。页面上的图形项目是 数字,所以班级变成Figure。 在比喻的语境中,Figure同时更短、更丰富,并且 比更精确绘图对象."

合格的子类名称

“子类的名称有两个作用。 他们需要沟通什么班级 他们的样子以及他们的样子 不同的。 [...] 与名称不同 层次结构、子类的根源 名称几乎不经常使用 对话,这样他们就可以 表达的代价是存在 简洁的。 [...]

给出作为 层次结构的根源很简单 名称。例如,HotDraw有一个 班级Handle其中呈现图- 图形编辑时的操作 已选择。简单地说,它被称为Handle尽管延长Figure。有 整个手柄系列,它们 最合适的名字是弹力手柄 and 透明手柄。 因为Handle是它自己的根 层次结构,它值得一个简单的 超类名多于限定名 子类名。

又一条皱纹 子类命名是多级的 层次结构。 [...]而不是盲目地 将修饰符添加到立即数前面 超类,想想这个名字 读者的观点。什么级别 他需要知道这门课是 喜欢?使用该超类作为基础 为子类名称。”

界面

两种风格的接口命名取决于您如何看待接口。 作为没有实现的类的接口应该像类一样命名 (简单的超类名称, 合格的子类名称)。这种风格的一个问题是 命名是在你开始命名类之前,好名字就已经用完了。一个 接口称为File需要一个名为类似的实现类实际文件, 具体文件,或者(哎呀!)FileImpl(后缀和 缩写)。一般来说,沟通一个人正在处理的是具体的还是 抽象对象很重要,无论抽象对象是否实现为 接口或超类不太重要。推迟之间的区别 这种命名风格很好地支持接口和超类,让您 如果有必要,稍后可以自由改变主意。

有时,简单地命名具体类对于通信来说比 隐藏接口的使用。在这种情况下,请在接口名称前加上“I”前缀。如果 接口被称为IFile,该类可以简单地称为File.

如需更详细的讨论,请购买本书!这很值得! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

命名类的最佳方法是什么? 的相关文章

  • 为什么 x86 寄存器如此命名?

    例如 累加器命名为EAX并且 当指令指针被调用时IP 我还知道有一些字节称为CL and DH 我知道所有的名字一定有一个约定 但是它是什么 我发现的东西 EAX Accumulator Register EBX Base Register
  • R 中的 Unicode 变量名称

    我正在开发一个玩具项目 并尝试使用一些 unicode 变量名称来匹配我试图实现的论文 以下代码在 Windows 上的 R 3 4 3 RStudio 版本 1 1 456 和 OSX 上的 R 3 5 1 上运行良好 gt lt fun
  • 约束命名的目的是什么

    命名约束 唯一 主键 外键 的目的是什么 假设我有一个使用自然键作为主键的表 CREATE TABLE Order LoginName VARCHAR 50 NOT NULL ProductName VARCHAR 50 NOT NULL
  • Powershell - 根据文件名创建文件夹,然后将该文件放入该文件夹中

    我有一个文件列表说 T123 Product 1 jpg T123 Product 2 jpg T123 Product 3 jpg T456 Product 1 jpg T456 Product 2 jpg T456 Product 3
  • 各个平台的保留文件名是什么?

    我不是在询问文件名的一般语法规则 我的意思是那些不知从哪里跳出来咬你的陷阱 例如 尝试在 Windows 上将文件命名为 COM From http www grouplogic com knowledge index cfm fuseac
  • C# 中变量名前的 @ 符号是什么意思? [复制]

    这个问题在这里已经有答案了 我知道可以在字符串文字之前使用 符号来更改编译器解析字符串的方式 但是当变量名以 符号为前缀时 它意味着什么 符号允许您使用保留字 例如 int class 15 上面的方法有效 而下面的方法则无效 int cl
  • Perl 函数名称冲突

    我遇到的情况是 我正在使用的模块有一个函数 其名称与我自己的模块中的函数完全相同 当我尝试调用模块中的函数时 OO Perl 所以 self gt function 它改为从其他模块调用该函数 我已经通过重命名我的函数来解决这个问题 但有趣
  • 您在程序中使用“kibibyte”作为度量单位吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 何时在 clojure(或 lisp)中使用感叹号?

    他们说在命名不纯函数时使用感叹号 但我不太理解 不纯 的功能 他们是吗 函数更改其参数的状态 通过重置 更改 java object methods 函数发生副作用 例如 打印 吐出 or both 显然 官方的 clojure api 并
  • python中物理量的命名

    我想为我的模拟代码中使用的物理 数学量建立一个良好的命名方案 考虑以下示例 from math import class GaussianBeamIntensity object Optical intensity profile of a
  • 如何使用宏在 C++ 中生成随机变量名称?

    我正在 C 中创建一个宏 它声明一个变量并为其分配一些值 根据宏的使用方式 第二次出现的宏可以覆盖第一个变量的值 例如 define MY MACRO int my variable random number here getCurren
  • “候选版本”应该是不可变的吗?

    如果我们有一个源代码控制分支 用于停止功能和错误测试 包括在该分支上进行额外提交以修复所述错误 那么它应该被称为什么 释放候选人 合适吗 我的想法是 这样的分支将被称为 发布 并且使用 候选 一词意味着它是不可变的 你可以有候选人 1 和候
  • 命名 PowerShell 动词的良好准则是什么?

    我还处于 PowerShell 学习的早期阶段 我想知道 Posh 中针对 cmdlet 或高级函数 无论它们在 CTP3 中如何称呼 的动词是否有一些好的指导方针 如果我使用 get 动词 我可以看到很多 但我仍然不确定应该如何布局我的模
  • 为什么 PyCharm 在此处使用 @property 时会发出警告?

    在教程中 我看到了两种用于使用 property 的实例属性命名类型 这是显示两者示例的代码 它们的工作方式似乎也不同 class A def init self x self x x property def x self return
  • 如何在 PHP 中使用没有命名空间的同名类?

    我有一个问题 我有两个第三方库类 我必须一起扩展和使用它们 但两者具有相同的命名约定 并且两个类名最终具有相同的名称 由于我无法扩展两个类 因此我不知道如何修复它们 如何针对一个类创建包装器 我无法使用 PHP 命名空间 因为 PHP 版本
  • 单位范围的清晰/标准名称 [0->1]

    我现在正在编写一个 Range 类 并且正在为公共范围 0 gt 1 寻找一个好名字 如果它是长度为 1 的向量 我将其称为单位向量 是否有一个明确的名称来给出这个范围 间隔 可能是一个单位范围 0 1 之间的封闭范围通常称为闭单位区间 h
  • 如何命名范围为 0.0 到 1.0 的值?

    我经常使用 0 0 到 1 0 之间的值来保存进度 透明度或其他可以从none to full 如果你愿意的话 可以给个百分比 我不想称其为百分比因为它不表示为 0 到 100 之间的值 为了给我的变量一个清晰的名称 我仍然想描述这种值 什
  • C 标准库函数名称中的“f”代表什么?

    什么是fC 标准库函数的名称代表什么 我注意到很多函数都有一个f以他们的名义 这对我来说真的没有意义 例如 fgets fopen printf scanf sqrtf等等 你的问题总体来说太笼统了 但我可以解释一些例子 fgets htt
  • JavaScript:从其中获取完全限定的函数名称?

    看看下面的片段 有没有我可以写的函数来代替 生成可以在另一个函数中重用的路线 就像是var route this show fullyQualifiedName也许 var services github com api v2 json r
  • Swift 的标准库和名称冲突

    我知道 Swift 不使用命名空间 但名称是在每个模块中定义的 首先 我不太明白这是如何避免名称冲突的 请随意详细说明 尽管如此 我的主要问题是 假设我想要一个不使用 NSTreeNode 的树结构 所以我创建了自己的类 名为 TreeNo

随机推荐