【问题标题】:Documentation when not using getters and setters不使用 getter 和 setter 时的文档
【发布时间】:2012-06-15 15:18:06
【问题描述】:

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

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

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

【问题讨论】:

  • 你好像把事情搞混了。如果不需要,建议不要在 Python 中使用 getter 和 setter,这意味着您不应该在 getter 和 setter 中包装普通实例属性——这在 Python 中不是必需的,因为如果您决定更改实例布局。
  • 所以你是说getName() 是自记录的,但包含名称的instance.name 不是?
  • 当你看到它时确定,但如果你没有看到类定义中的值?仅通过查看代码,您是否可以假设它始终存在,而不是刚刚为程序的这一部分添加的一些魔术键/属性?
  • 如果代码动态地向类添加新属性并且这些属性是该类接口的一部分,那就是糟糕的编程。
  • @Guu Python 命名约定是用前下划线命名任何纯粹的实现细节。例如:something._weight.

标签: java php python setter getter


【解决方案1】:

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

很难阅读。

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

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

这常常使领域层过于依赖持久层。

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

【讨论】:

  • 我会接受的。应该制作文档,以便您可以快速查看 IDE,并且从那里应该很明显。
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
相关资源
最近更新 更多