《代码整洁之道 》第六章 对象和数据结构

本文探讨了如何在编程中正确运用对象和数据结构,强调了数据抽象、得墨忒耳律和两者之间的对立。作者揭示了为何过度公开私有变量的问题,并介绍了数据传送对象和避免混杂结构的重要性。通过实例和规则,阐述了如何保持代码的清晰与模块化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章 对象和数据结构

将变量设置为私有(private )有一个理由:我们不想其他人依赖这些变量。我们还想在 心血来潮时能自由修改其类型或实现。那么,为什么还是有那么多程序员给对象自动添加赋 值器和取值器,将私有变量公之于众、如同它们根本就是公共变量一般呢?

6.1 数据抽象

image.png

6.2 数据、对象的反对称性

这两个例子展示了对象与数据结构之间的差异。对象把数据隐藏于抽象之后,曝露操作 数据的函数。数据结构曝露其数据,没有提供有意义的函数。回过头再读一遍。留意这两种 定义的本质。它们是对立的。这种差异貌似微小,但却有深远的含义。
面向过程

在这里插入图片描述

面向对象

在这里插入图片描述

6.3 得墨忒耳律

模块不应了解它所操作对象的内部情形。
这意味着对象不应通过存取器曝露其内部结构,因为这样更像是曝露而非隐藏其内部结构。

image.png

6.3.1 火车失事

image.png

6.3.2 混杂

这种混淆有时会不幸导致混合结构,一半是对象,一半是数据结构。
此类混杂增加了添加新函数的难度,也增加了添加新数据结构的难度,两面不讨好。

6.3.3 隐藏结构

怎么来获取临时目录的绝对路径?
image.png

6.4 数据传送对象

最为精练的数据结构,是一个只有公共变量、没有函数的类。这种数据结构被称为数据传输对象DTO。
Active Record是一种特殊的DTO形式,他们拥有公共的变量的数据结构,通常也会有save()或者find()这样可浏览的方法。Active Record一般是对数据库表或其他数据源直接的翻译。
我们不幸经常发现开发者往这类数据结构中塞进业务规则方法,把这类数据结构当成对 象来用。这是不智的行为,因为它导致了数据结构和对象的混杂体。
当然,解决方案就是把Active Record 当做数据结构,并创建包含业务规则、隐藏内部数 据(可能就是Active Record 的实体)的独立对象。

6.5 小结

对象曝露行为,隐藏数据。便于添加新对象类型而无需修改既有行为,同时也难以在既有对象中添加新行为。数据结构曝露数据,没有明显的行为。便于向既有数据结构添加新行为,同时也难以向既有函数添加新数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值