命名对象实体对象_我的对象命名

命名对象实体对象

这是最常见的辩论之一。 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的。 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助。

当我创建一个新类时,我要做的第一件事就是设计其接口(如您所知,我相信任何对象都必须实现至少一个接口)。 接口的名称通常反映对象什么,而不是对象的作用或其他对象应使用的对象。 在极少数情况下,我认为形容词是合适的,其中之一是Iterable

汤姆和杰里–杰里的表哥,威廉·汉娜(William Hanna)和约瑟夫·巴贝拉(Joseph Barbera)

然后是该接口的实现。 由于将来可能会有更多实现,因此我主要根据封装的细节来命名对象。 因此,假设接口是HttpRequest ,那么如果遵循该接口的第一个对象使用ApacheHttpClient,则其名称可能是ApacheRequest 。 然后,可能会有另一个实现,与另一个http客户端(可能是jcabi-http)一起工作 ,在这种情况下,名称将为JcabiRequest

到目前为止,还算不错,也许没有什么新鲜的,但是这里有个要注意的地方:根据模式的不同,我自己的类的名称不一定一定有意义。 例如,在我的一个项目中的某处,您将看到以下类:

/*** Decorator which adds some HTTP headers on the decorated request.*/
public final class HttpHeaders implements HttpRequest {//...
}

它本身看起来并不自然,对吧? 好吧,应该很清楚,这种类型的请求永远都不应该“单独”使用。 它的构造函数甚至不允许它,因为它应该包装另一个HttpRequest ,或者另一个包装器,或者一个具体的请求。 你能想到一个更好的名字吗? 我相信,在命名一个类时,我们还必须考虑如何使用它,在何种上下文或模式下使用-如果将所有这些名称放在一起时这些名称有意义,那么您就可以了。 添加无用的名词只会导致噪音。

HttpHeaders的用法如下:

Map<String, String> headers = ...;HttpRequest request = new HttpHeaders (new Get(URI.create(...)),headers);

此外,我讨厌无用的后缀。 让我们以最光荣的例子为例:“工厂”。 您是否注意到,当一个对象负责创建其他对象时,不再重要了吗? 上下文,业务,领域,什么都没有! 该不良对象的名称必须带有后缀“ Factory”,否则代码将无法工作。

我的代码中确实有工厂对象,但是“ factory”一词在任何地方都没有。 该项目是一个聊天机器人,最顶级的抽象之一是“知识”,机器人知道该怎么做。 知识的每种实现都会创建代表它的步骤树–机器人需要执行一个或多个步骤才能执行任何命令。 我所谓的“知识”实际上是一个工厂对象,因为它会创建其他对象(这些步骤)。 汇编代码如下所示:

final Conversation talk = new Conversation(new Hello(new RunScript(new Confused())));talk.start(command);

ConversationHelloRunScriptConfused都实现了Knowledge并且它们以级联机制一起工作,以便找到要执行的正确步骤。 上面的代码片段翻译为以下单词:“对话开始,机器人可以说'你好',为您运行一些脚本,如果它不理解命令,可能会感到困惑”。

现在,这里是相同的代码片段,但具有更常见的命名:

final StepsFactory factory = new ConversationFactory(new HelloFactory(new RunScriptFactory(new ConfusedFactory())));factory.getSteps(command);

哪一个更好? 它们都将以相同的方式工作,这仅与可读性有关。 对我而言,这就像是完成的建筑物还是周围仍然有建筑脚手架的建筑物–没有人想知道房屋的建造方式,所使用的所有脚手架和仪器,这并不重要。 取而代之的是,每个人都渴望看到最终的构造,并且他们应该了解它的作用,而不要弄清楚实现它的目的。

另一个命名示例:

Log log = new WebLog(new LogFile("/comdor/ActionLogs", this.id),"https://webapps.amihaiemil.com"
);

为什么选择WebLog ? 因为封装的日志最终将在Web UI上呈现给用户。 调用log.address() ,字符串“ https://webapps.amihaiemil.com”将与文件名连接在一起以形成有效的URL。 这是WebLog类,您还可以看到Log类型的封装变量(将显示给用户)被命名为“ onServer”,因为它是最终从中获取的日志文件。服务器。

这几乎就是我如何处理命名的想法。 而且,当然,我总是写JavaDocs(如果没有它们,Maven Central甚至不允许您发布任何内容),因此,如果名称不够好,它上面的JavaDoc总是会为您提供帮助。 你怎么看? 您使用什么命名约定?

翻译自: https://www.javacodegeeks.com/2018/01/take-object-naming.html

命名对象实体对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python查看关键字列表的命令是_Python 41 完整查询语句 和 一堆关键字

一&#xff1a;完整查询语句1、拷贝表 ***create table copy_table select *from customer ; 拷贝结构 与数据create table copy_table select *from customer where 0 > 1; 仅拷贝结构共同点&#xff1a; 索引 不能拷贝 描述不能拷贝(自增)[ ] 表示可选的{ }表示必选的增…

程序员的技术人生

文章目录第一阶段&#xff0c;高级程序员第二阶段&#xff0c;技术经理第三阶段&#xff0c;技术总监第四阶段&#xff0c;架构师第五阶段&#xff0c;CTO人们常常把 CTO、架构师、技术经理的头衔&#xff0c;乱授予技术负责人。在国内这种现象尤其严重。比如&#xff0c;一个初…

python csv转为html,在Python中将CSV转换为HTML表格

首先安装熊猫&#xff1a;pip install pandas然后运行&#xff1a;import pandas as pdcolumns [age, week, opp, ACscr, OPPscr, location]df pd.read_csv(Crushers.csv, namescolumns)# This you can change it to whatever you want to getage_15 df[df[age] U15]# Othe…

python椭圆拟合_opencv python 轮廓特征/凸包/外接矩形/外接圆/拟合矩形/拟合直线/拟合圆...

Contour Features1 图像的矩cv2.moments()图像的矩可以帮助计算物体的某些特征&#xff0c;如对象的质心&#xff0c;对象的区域等.代码&#xff1a;import cv2import numpy as npimg cv2.imread(img7.png,0)ret,thresh cv2.threshold(img,127,255,0)im2,contours,hierarchy …

RPM 软件包命名规范

文章目录命名格式示例命名格式 name-version-release.os.arch.rpm&#xff0c;软件名称-版本号-发布次数.适合linux系统.硬件平台.rpm name&#xff1a;程序名称 version&#xff1a;程序版本号 release&#xff1a;用于标识 RPM 包本身的发行号&#xff0c;其实就是软件包…

junit5和junit4_JUnit 5符合AssertJ

junit5和junit4JUnit 5在断言库中带来了很多改进&#xff0c;这主要归功于Java 8和Lambda Expression的支持以及新断言&#xff08;如assertAll &#xff0c; assertTimeout或assertThrows 。 尽管我非常喜欢JUnit 5&#xff0c;但我相信AssertJ在生产级单元测试中仍然是必不可…

微信html人脸识别接口,微信人脸识别可视化的实现:

实现方式主要通过以下模块实现&#xff1a;DateFromWebChat (从网页版微信窗口下载好友头像)AI (识别模块&#xff0c;主要用于识别好友头像是否为人脸&#xff0c;并且计算人脸的数量与头像的总数且return)DateVisul (数据可视化模块&#xff0c;用与AI模块返回参数的可视化)u…

安卓手机端运行的adb工具_MQTT通信手机端接收生产车间设备运行信息3

应用场景&#xff1a;对车间重点设备的运行参数进行实时跟踪。比如烘干炉的烟囱温度、TNV的出口温度、喷漆室的温湿度、小时产量等等信息。以前这些信息的获取都需要在电脑端获取、相对比较繁琐。这里我们选择在手机端实现获取这些信息。尤其是对于作者这样的设备负责人而言&am…

Linux 命令之 tree -- 以树状图列出目录的内容/查看目录内容

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;按树形结构显示当前目录下的内容&#xff08;二&#xff09;按树状图显示当前目录下的所有目录名称而非文件&#xff08;三&#xff09;列出指定目录下的第一层级的文件和目录名称&#xff08;四&#…

jsf 项目_您将在下一个项目中使用JSF吗?

jsf 项目上周有一篇很棒的stackoverflow博客文章&#xff0c;主题是“ Javascript框架的残酷生命周期” 。 这篇文章是关于Javascript UI框架&#xff08;angularjs&#xff0c;angular&#xff0c;jquery和react&#xff09;的流行和流行的速度。 这篇文章的关键指标是每月关于…

html 定时刷新 数据,js中,设置定时器 每隔几秒刷新一次页面数据

页面加载进来&#xff0c;查询 然后设置定时器 每隔五秒刷新一次页面数据fnSearch();var interval3setInterval(function(){fnSearch();},5000);function fnSearch(){searchjson.search$(".iptsearch").val();$.ajax({url:/movecheck/getCheckInfo,data:searchjson,…

查询varchar实际大小_微服务和VUE(11): mybatis 动态查询

1. 新建class表和student表&#xff1a;CREATE TABLE class ( class_id varchar(20) NOT NULL, class_name varchar(50) DEFAULT NULL, headmaster_name varchar(20) DEFAULT NULL, headmaster_tel varchar(20) DEFAULT NULL, PRIMARY KEY (class_id)) ENGINEInnoDB …

Linux 中 ctime,mtime,atime 的区别

文章目录改变和修改的区别ctimemtimeatime查看文件时间关于 relatime改变和修改的区别 改变和修改之间的区别在于是改变文件的属性还是改变文件的内容。如果有人说 chmod a-w myfile&#xff08;删除所有用户对文件 myfile 的写权限&#xff09;&#xff0c;那么这叫改变&…

java迭代器删除两个_两个迭代器的故事

java迭代器删除两个当您查看最流行的Java面试问题时&#xff0c;您可能会遇到有关故障快速和故障安全迭代器的问题&#xff1a; 故障快速迭代器和故障安全迭代器之间有什么区别&#xff1f; 简化的答案是&#xff1a; 如果在迭代过程中修改了集合&#xff0c;则快速失败迭代器…

Linux 命令之 stat -- 显示文件的状态信息

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;显示文件的状态信息&#xff08;二&#xff09;以简洁方式输出文件的状态信息&#xff08;三&#xff09;显示文件所属的文件系统状态信息一、命令介绍 用于显示文件的状态信息。stat命令…

python tkinter滚动条不起作用_Tkinter滚动条不工作

我有一段运行在python3.4上的tkinter代码&#xff0c;它是一个放在画布上的带有垂直滚动条的大框架&#xff0c;但是滚动条是灰色的&#xff0c;似乎没有与框架的大小相关联。我使用的代码基本上是&#xff1a;class EntryWindow:def __init__(self, master):self.master mast…

大工17秋《计算机文化基础》在线测试1,大工17秋《组织行为学》在线测试1答案...

大工17秋《组织行为学》在线测试1一、单选题&#xff1a;1.根据气质的分类&#xff0c;较适合做推销工作的人员的气质类型是( )。 (满分:3)A.胆汁质B.多血质C.抑郁质D.黏液质正确答案:[hide]——B——[/hide]2.组织行为学在中观层面所要研究的主要内容是( )。 (满分:3)A.个体心…

java分页中显示更多_早期更多失败– Java 8

java分页中显示更多快速失败或早期失败是一种软件工程概念&#xff0c;旨在通过在不应该发生的事情发生时立即停止执行来防止复杂问题的发生。 在之前的博客文章和演示中&#xff0c;我将详细介绍这种方法的优点&#xff0c;在此博客文章中&#xff0c;我将详细介绍Java 8中该思…

计算机组装与维修单招,单招职二 计算机组装与维修试卷.doc

单招职二 计算机组装与维修试卷高二 计算机组装与维修试卷一、填空题(每空1分&#xff0c;共计30分)1.一个完整的计算机系统是由______________和______________两部分组成的。2.为了更好的为CPU散热&#xff0c;在安装风扇前&#xff0c;先在CPU芯片的顶部均匀地涂抹上一层___…

普通人学python好吗_有人问,普通人学python真的有意义吗?看看大家都是怎么说的吧...

普通人学python有意义吗&#xff1f;现在随着python越来越火&#xff0c;尤其是它成为了人工智能的第一编程语言&#xff0c;还被纳入了中小学的教育中。并且python的应用范围很广泛&#xff0c;可以解决很多专业或非专业的问题。但python真的适合普通人学习吗&#xff1f;我个…