很多人都知道这篇文章:关于 getter 和 setter 的更多信息。我认为它在描绘 getter/setter 的邪恶方面方面做得很有说服力。我还通过尝试将现有项目(未完成)转换为没有 getter/setter 的代码来测试它。有效。代码可读性大大提高,代码更少,我什至设法摆脱了我最初认为确实必要的 getter/setter。除了一处。
让模型进入视图部分是我认为这种方法没有抓住重点的地方。在文章中,作者使用构建器来导出模型。问题是:对于放入构建器的内容的控制与使用 getter 获得的控制一样多。是的,它隐藏了实现,它在模型中的表示方式。但是吸气剂不会从模型中得到与放入其中的非常不同的东西。如果您创建一个通过构造函数传递“5”的 Money 对象,money.getAmount() 将不会返回转换为其他货币或包含一个元素“5”的数组。
你设置你得到什么。通过视图我们设置值,以及当我们从一个应该保存我们最初设置的对象中请求(获取)它们时我们期望的那些值。导出这些的构建器只是期望相同。
这个问题有点长。但我想在我的观点上受到挑战。将模型数据传输到视图层时,getter 和 setter 是否邪恶?
有很多人认为 getter/setter 一点都不邪恶。这也不是我想听到的辩护,因为我认为他们在其他地方确实是邪恶的,而不是我提到的那些地方。