gpt4 book ai didi

oop - 没有 setter/getter 的正确 OOP 设计?

转载 作者:行者123 更新时间:2023-12-04 02:49:04 24 4
gpt4 key购买 nike

我最近读到 getter/setter 是邪恶的,我不得不说这是有道理的,但是当我开始学习 OOP 时,我学到的第一件事就是“封装你的字段”,所以我学会了创建类给它一些字段,创建 getter ,为它们 setter 并创建构造函数,我在其中初始化这些字段。每次其他类需要操作此对象(或例如显示它)时,我都会将对象传递给它,然后它使用 getter/setter 来操作它。我可以看到这种方法的问题。

但是怎么做才是正确的呢?例如,显示/渲染对象是“数据”类 - 假设 Person,具有姓名和出生日期。该类是否应该具有显示对象的方法,其中一些 Renderer 将作为参数传递?这不会违反类应该只有一个目的(在这种情况下存储状态)的原则,所以它不应该关心这个对象的表示。

您能否推荐一些介绍 OOP 设计最佳实践的好资源?我打算在业余时间开始一个项目,我希望它成为我正确 OOP 设计的学习项目。

最佳答案

Allen Holub 用 "Why getter and setter methods are evil" 引起了轰动回到 2003 年。

很高兴您找到并阅读了这篇文章。我钦佩任何正在学习和批判性思考他们正在做的事情的人。

但是对 Holub 先生持保留态度。

这是一种因其极端立场和“邪恶”一词的使用而受到广泛关注的观点,但它并没有引起轰动,也没有被普遍接受为教条。

看看 C#:他们实际上在语言中添加了语法糖,使 get/set 操作更容易编写。这要么证实了某人将微软视为邪恶帝国的观点,要么与 Holub 先生的说法相矛盾。

事实上,人们编写对象是为了让客户可以操纵状态。这并不意味着以这种方式编写的每个对象都是错误的、邪恶的或不可行的。

极端的观点是不切实际的。

关于oop - 没有 setter/getter 的正确 OOP 设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2559641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com