可能重复:
艾伦写道赫鲁伯“你不应该使用get / set函数”,是他是否正确?
是否有一个良好的,没有,一个很好的理由,要通过使用getter和setter方法的面向对象语言的所有麻烦吗? 这有什么错只使用一个直接引用属性或方法? 是否有某种“语义掩饰”,人们并不想谈论在礼貌的公司? 当时我只是太累了,睡着了,当有人走了出来,说:“你要编写代码的荧光棒金额获取getter和setter”?
随访一年后:
这似乎是司空见惯的事情了Java,所以较少与Python。 我开始怀疑这更多的是一种文化现象(与语言的限制),而不是“明智的建议”。 正如我在Java中没有程序(目前由选择),我不能作出这样的评价。
目前(电流为写这篇文章的2010-03-22)-1问题得分是完整的最lulz据我所关注的。 有趣的是,有一些是downvoted,不是因为他们是“坏的问题”,而是具体的问题,因为他们打别人的痛处 。
因此,让我们得到了事情的螺母。 我重复一遍:
What's wrong with just using a direct reference to a property or method?
而这里的不成文的推论:
Are we so undisciplined as programmers that we can't keep our hands off of things that are clearly marked "no touchy"?
这是艾伦·霍尔布(谁是辉煌) 对此事的 。 他进入更多的细节就这一问题进行赫鲁伯的模式 。 有些事情需要公共的getter和setter像系列化和模式,比如在数据传输对象模式 。 在一般情况下,我认为必要的邪恶,因为当你不使用它们的应用程序变得错综复杂。
getter和setter隐藏类的数据细节从你的类的用户。
在许多情况下,他们没有得到充分利用,但它始终是使用它们的好主意。 到你的对象数据的直接访问降低了封装。
如果当你改变主意有关数据成员不使用getter和setter,你打破你的类接口,并且必须改变你的代码的其余部分以符合变化。 在某些情况下,你的类代表一个公共API的一部分,这甚至是不可能的。 如果您在getter和setter包装你的属性,你可以做出这些变化,并通过修改getter和setter方法耗时代码隐藏起来。
保护。 有些属性/方法不应该从没有叫类...永远。 我敢肯定,你保持唯一的权威告诉任何人你的社会安全号码,对不对? 他们必须要问你(吸气)? 当然,你不会建议我们让人们在我们自己的静物直接访问私人数据/方法...为什么把你的应用程序有什么不同? :)
我发现它是有用的一种方法是,可以设置一个断点设置的(更何况比GET)。 这可能意味着“我编码是错误的,”但至少我可以找出什么时候它的变化。
getter和setter方法是实现的一个方面打开/关闭原则 。 如果封装了所有的适当性背后的功能,然后使用您的属性不会打破代码。 这也使得它可以完全取代在将来别的东西,对象 - espcially如果你的代码的接口,而不是一类。
他们是如此的重要,C#通过辛苦都做出基本的getter和setter容易编写。
为了进一步理解为什么OOD的某些方面是很重要的,读的书紧急设计由斯科特·贝恩。
文章来源: Getters and Setters: Code smell, Necessary Evil, or Can't Live Without Them [duplicate]