Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用getter和setter时的文档_Java_Php_Python_Setter_Getter - Fatal编程技术网

Java 不使用getter和setter时的文档

Java 不使用getter和setter时的文档,java,php,python,setter,getter,Java,Php,Python,Setter,Getter,在Java中,当我有简单的模型/POJO时,我使用getter/setter。我发现当你这样做的时候,代码就变成了自我记录。调用getName()将返回一个名称,我不需要关心它如何映射到某个数据库等等 当使用getter和setter开始感觉笨拙的语言时,就会出现问题,就像在Python中一样,我经常听到人们说它们不好。例如,有一次,我有一个PHP项目,其中一些数据只是从数据库中查询出来的,列值映射到对象/字典。我发现像这样的代码很难阅读,你不能仅仅阅读代码,你阅读了代码,然后你注意到这些值是从

在Java中,当我有简单的模型/POJO时,我使用getter/setter。我发现当你这样做的时候,代码就变成了自我记录。调用getName()将返回一个名称,我不需要关心它如何映射到某个数据库等等

当使用getter和setter开始感觉笨拙的语言时,就会出现问题,就像在Python中一样,我经常听到人们说它们不好。例如,有一次,我有一个PHP项目,其中一些数据只是从数据库中查询出来的,列值映射到对象/字典。我发现像这样的代码很难阅读,你不能仅仅阅读代码,你阅读了代码,然后你注意到这些值是从数据库中获取的,现在你必须一直查看数据库模式才能理解它。当您所能做的只是查看类定义,并知道那里不会有任何未记录的魔术键


所以我的问题是,你们如何在没有getter和setter的情况下记录代码?

在我看来,类中不应该有任何未记录的属性。PHP和其他语言允许您从任何地方将属性粘贴到类上,无论它们是否已在类中定义。我认为这是不好的做法,原因如下:

很难读

这使得其他程序员(包括你未来的自己)更难理解正在发生的事情

它阻止IDE中的自动完成功能正常工作

它常常使域层过于依赖于持久性层


对于我来说,是否使用getter和setter访问类的已定义属性更具可替代性。我希望事情是一致的,所以如果我有一个类,它有一个getChildren()方法来延迟加载一些对象数组,那么我不会将$children属性设置为公共的,我也倾向于将其他属性设置为私有的。我认为这更像是一个品味的问题,但我发现直接访问类中的某些属性($object->name;)和通过getter/setter访问其他属性是很烦人的。

您似乎把这里的事情搞混了。如果不需要,建议不要在Python中使用getter和setter,这意味着您不应该在getter和setter中包装普通的实例属性——在Python中这是不必要的,因为如果您决定更改实例布局,您可以使用属性来保持向后兼容性是自文档化的,但是
实例。包含名称的名称
在您看到它时不确定,但是如果您没有看到类定义中的值?通过查看代码,您可以假设它始终存在,而不是为程序的这一部分添加的某个魔术键/属性?如果代码动态地向类添加新属性,并且这些属性是该类接口的一部分,这是一个糟糕的编程。@Guu Python命名约定是用前面的下划线命名纯粹是实现细节的任何东西。例如:
某物。_-weight
。我接受这个。应该制作文档,以便您可以快速查看IDE,并且从那里可以清楚地看到它。