Jul*_*lio 26 c# java oop encapsulation
简单地阅读上面的文章我发现getter和setter是糟糕的OO设计,应该避免它们反对Encapsulation和Data Hiding.在这种情况下,如何在创建对象时避免它,以及如何将对象模型对象考虑在内.
如果需要吸气剂或固定剂,可以使用其他替代品吗?
谢谢.
Cor*_*sky 51
你错过了这一点.该文的有效,重要的一点是:
不要求您提供完成工作所需的信息; 询问有信息的对象为你做的工作.
Java风格的getter和setter扩散是忽略这个建议的症状.
DVK*_*DVK 33
吸气剂或制定者本身也不错OO设计.
糟糕的是编码实践,其中包括一个getter和一个setter,用于自动成为每个成员,是否需要getter/setter(加上公共成员不应公开) - 因为这基本上暴露了类的实现到外部世界违反信息隐藏/抽象.有时这是由IDE自动完成的,这意味着这种做法比预期的要广泛得多.
我相信在API中包含setter只有它们真的是类规范的一部分(即它与调用者的合同).
应该隐藏与内部表示相关的任何其他数据成员,我至少看到两个主要原因:
1)如果暴露内部表示,设计变更将来会出现问题,并且还需要API更改.
2)使用setter/getter公开数据成员时不要小心,这使得调用者很容易破坏类不变量.状态不一致的对象可能会导致很难分析的错误.
不幸的是,有一些框架鼓励(有时需要)为所有内容添加setter/getter.
是的,getter和setter是OOP中的反模式:http : //www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html。简而言之,它们不适合面向对象的范例,因为它们鼓励您将对象视为数据结构。这是一个主要的误解。
归档时间: |
|
查看次数: |
10262 次 |
最近记录: |