【发布时间】:2019-04-07 06:45:23
【问题描述】:
正如罗伯特·马丁的Clean Code 所说:
对象隐藏 他们的数据在抽象背后,并公开对该数据进行操作的函数。数据结构 暴露他们的数据并且没有有意义的功能。
但他也提到:
过程代码(使用数据结构的代码)可以轻松添加新功能,而无需 改变现有的数据结构。另一方面,OO 代码使其易于添加 新类而不改变现有功能。
和:
... 这种混合使得添加新功能变得困难,但也使得添加新数据变得困难 结构。他们是两全其美的。避免创建它们。
上面的Hybrid是指数据结构和对象之间的混合。
但是数据结构好像有冲突:使用数据结构的好处是添加函数更容易,但是对于数据结构我们最好不要在里面添加函数。那么拥有数据结构有什么意义呢?例如。 DTO(数据传输对象)是使用数据结构而不是使用对象的示例之一。而且最好不要在其中添加大量的 getter 逻辑。 -- 但是为什么呢?
【问题讨论】:
-
一般来说,当你用面向对象的语言实现数据结构时,数据结构将使用类来定义,其实例将是对象。该术语似乎更面向 C/C++,作为语言特性,您可以区分类和结构。
-
注意对象和数据结构之间的冲突被称为the expression problem。
标签: oop design-patterns language-agnostic