提问人:laahaa 提问时间:11/3/2018 最后编辑:BSMPlaahaa 更新时间:11/3/2018 访问量:536
为什么我们有时更喜欢数据结构而不是对象?
Why do we sometimes prefer having data structures over objects?
问:
正如罗伯特·马丁(Robert Martin)的《清洁代码》(Clean Code)所说:
对象隐藏 他们的数据隐藏在抽象后面,并公开了对该数据进行操作的函数。数据结构 暴露他们的数据,并且没有有意义的功能。
但他也提到:
过程代码(使用数据结构的代码)可以很容易地添加新函数,而无需 更改现有数据结构。另一方面,OO 代码使其易于添加 在不更改现有函数的情况下创建新类。
和:
... 这种混合使得添加新功能变得困难,但也使添加新数据变得困难 结构。它们是两全其美的最糟糕的。避免创建它们。
上面的混合是指数据结构和对象之间的混合。
但是数据结构似乎存在冲突:使用数据结构的优点是更容易添加函数,但对于数据结构,我们最好永远不要在其中添加函数。那么拥有数据结构有什么意义呢?例如,DTO(数据传输对象)是使用数据结构而不是使用对象的例子之一。而且,不要在其中添加大量逻辑总是一个好习惯。--但是为什么?
答:
1赞
Nghia Bui
11/3/2018
#1
你误解了鲍勃叔叔说的话。
使用数据结构的优点是可以更轻松地添加函数
不,应该是:分离数据结构和函数的优点是更容易添加函数。
当数据结构和函数分离时,可以在不破坏旧函数的情况下添加新函数。相反,当数据结构和函数被捆绑到单元中时,就像 OOP 中的类一样,添加一个新函数(方法)将破坏所有旧的单元/类。
评论
0赞
laahaa
11/4/2018
我们如何分离数据结构和函数,尤其是在像 java 这样的面向对象语言中?
0赞
Nghia Bui
11/4/2018
在“OO”语言中,你仍然可以很容易地编写非OO代码,只写不带方法的类,只写不带属性的类,只用静态方法写不带属性的类。
0赞
jaco0646
11/5/2018
我建议使用组合方法,而不是静态方法:编写由数据结构组成的对象并将它们封装起来。这样可以保持数据结构的纯粹性和简单性,并防止对象作为数据结构本身传递。
评论