Java 命令对象集合的名称
我正在开发一个命令处理程序,其中每个命令都可以无限期地包含子命令。所有命令都由“CommandManager”在根级别进行管理,它接受用户输入,解析选项,然后找到正确的命令并将输入传递给它。由于CommandManager和Command都有类似的获取和存储指定命令的方法,而且这两个类都非常混乱,我想找出查找命令并将其存储到公共超类中的逻辑,但是,我想不出一个描述性名称来调用它 我之所以尝试使CommandMagager和命令都扩展另一个类,是因为命令管理器的行为类似于根级别的命令。命令实际上并不包含任何处理命令的逻辑,它们只是提供了一种用特定名称注册和检索命令的方法Java 命令对象集合的名称,java,oop,naming-conventions,Java,Oop,Naming Conventions,我正在开发一个命令处理程序,其中每个命令都可以无限期地包含子命令。所有命令都由“CommandManager”在根级别进行管理,它接受用户输入,解析选项,然后找到正确的命令并将输入传递给它。由于CommandManager和Command都有类似的获取和存储指定命令的方法,而且这两个类都非常混乱,我想找出查找命令并将其存储到公共超类中的逻辑,但是,我想不出一个描述性名称来调用它 我之所以尝试使CommandMagager和命令都扩展另一个类,是因为命令管理器的行为类似于根级别的命令。命令实际上并
是否有任何通用惯例可以帮助我找到一个名称,或者这是看待问题的错误方式?是的,关于这一点有一些规则,不是一成不变的,只是通过经验和模仿而成为公认的最佳实践的一种实践 概述
- 明确责任
- 使用驼峰案例
- 命名对象,而不是类
- 使用名词
- 避免使用诸如
、Info
或Processor
之类的词Manager
- 如果有对象,请使用单数
- 实用程序类使用复数形式
- 在抽象基类前面加上
abstract
- 用
作为隐藏实现类的后缀Impl
- 不要在
名称前面加接口
I
- 正确使用设计模式名称
- 在名称前面加上它们的专门化
- 正确使用数据结构名称
compile()
,如果是主动动作,请使用Compiler
;如果是被动能力,请使用compileable
。如果动作是run()
,如果是主动动作,请使用Runner
,如果是被动异能,请使用Runnable
避免使用诸如Info
、Processor
或Manager
在大多数情况下,它们只是“我不知道该怎么称呼这个”的同义词(罗伯特·C·马丁)。这本身就是“我不知道这东西在做什么”或“这东西在做不止一件事”的症状。这就是为什么当我们看到这样的名字时,我们常常理所当然地感到重构的冲动
如果有对象,请使用单数
类名通常是单数的,特别是当您可以获得单个类的多个对象时。我们喜欢为这些对象集合的变量名保留复数形式
好榜样
JButton按钮;
列表按钮;
坏榜样
Properties
是一个不好的类名,因为它是复数的,尽管存在对象。我们喜欢调用列表jButtons
。那么,如何调用列表
-属性
<代码>属性
<代码>属性
实用程序类使用复数
如果一个类只包含静态方法,而这些静态方法的唯一目的是为另一种类型提供实用方法,那么它就是一个实用类
好例子
集合
,SPIFilter
,数组
,执行器
,文件系统
,文件
,路径
在抽象基类前面加上abstract
接口Foo
的抽象基实现通常称为AbstractFoo
示例:AbstractAction
,AbstractList
,AbstractMap
,AbstractQueue
等等
确保此名称是用户几乎看不到的名称,AbstractSomething
是实现者/扩展者的好名称,而不是用户的好名称。只有在没有更好的名字时才选择这个名字
用Impl
为接口或抽象类Foo
提供默认实现的类有时称为FooImpl
确保用户从未看到此名称。从来没有。它只对实现者有好处,对其他人没有好处。像XyzImpl
这样的名称不能对用户可见。只有在没有更好的名字时才选择这个名字
不要在接口
名称前加I
OO语言中类型的用途通常是封装和隐藏对象。类型是类
、接口
、枚举
还是@接口
注释都是该类型的详细信息。只有两种情况需要了解有关类型的这些详细信息:当您想要扩展类型时,以及当您想要创建该类型的对象时。这些用例是类型用例的少数。在接口名称前面加上I
,大声声明实际上应该隐藏的实现细节,违反了这一原则
在interface
s的名称前面放一个I
,就像使用匈牙利符号一样。匈牙利符号只有在您工作的环境中才有意义,在这种环境中,跟踪您类型的这些物理方面是至关重要的。(就这一点而言,现在在C中甚至不需要它!)
此外,你知道
JButton button;
List<JButton> buttons;
Command
CompositeCommand
SimpleCommand
Command
CompositeCommand
RootCommand
SimpleCommand
Command
CompositeCommand
Subcommand
RootCommand
SimpleCommand