《重构》第八章 - 读后感(重新组织数据)

前边两章节我们已经学过了函数和类上的重构,确实来说如果我们要达到写出一笔极好的代码,把前两章的内容背诵是一种路径,个人觉得重构和诗词一般。所以说个人的感悟是一方面,能够在编码中及时的使用出来则是另一种能力。今天我们看一下第八章:重新组织数据。那么我们代码中那块应该叫做数据?又如何去重新组织

 1.自封装字段

直接访问一个字段,但是字段之间的耦合关系逐渐变得笨拙,为了这个字段建立或者设置函数,并且只以这些函数来访问字段。在字段访问的问题上,有两种不同的观点,一种认为在该变量定义所在的类中,你可以自由访问,另一种则认为即使在这个类中也只能通过访问函数才能访问。第二种访问变量的好处就是子类可以通过覆写一个函数改变获取数据的途径,它还支持更加灵活的数据管理方式,例如延迟初始化。直接访问变量的好处是代码比较容易阅读。在实际工作中我们也应该两手准备。

2.以对象取代数据值

在一些情况单纯的使用数据来表征具体的业务造成该业务类存在边界不分的状态,因此需要将部分数据抽离形成数据类的方式进行存在。书中列举了用户信息和用户电话信息的关系,因为电话信息又区号和号码部分组成,因此将电话信息独立成类并聚合到用户信息中。

3.将值对象改为引用对象

从一个类衍生出许多相等的实例,希望他们替换为同一个对象。这块要表达的意思就是说在代码中如果从在多个相同的数据,那么我们应该将其合并为一个,也就是要复用这一个对象而不是创建多个相同的数据。书中的示例是订单和订单的用户信息。因为每个订单都有一个用户关联,那么一个用户有多个订单就意味着有多个用户实例的存在,因此这就成为一个重构点。书中采用的hashmap进行重构,但是在实际工作中,个人觉得应该在业务设计上去解决该问题,避免出现重复对象这种问题。

4.将引用对象改为值对象

这种情况就是表达了和值对象转为引用对象的相反情况,你懂得!

5.以对象取代数组

数组存在的意义就是说同一系列的值得集合,但是如果一个数组中却是代表不同的东西,那么就可以将数组改变为对象,对数组中的每一个元素用一个字段来表示。

6.复制被监视的数据

一些领域数据置身于GUI控件中,而领域函数需要访问这些数据,将该数据复制到一个领域对象中,建立一个观察者模式,以同步领域对象和GUI对象内的重复数据。一个分层良好的系统,应该将处理用户界面和处理业务逻辑代码分开。你可能使用不同的用户界面来表现相同的业务逻辑,如果同时担任两种责任,用户界面会变得非常复杂。与GUI隔离之后,领域对象的维护和演化都会变容易,你甚至可以让不同的开发者负责不同部分的开发任务。因为数据有可能需要内嵌到GUI组件,也要保存在领域内。这块因为有mvc这种模式,所以我们拆分的目标就是数据和动作耦合的清除。对于这种行为和数据绑定的情况,我们可以采用观察者模式进行数据和行为的拆分,观察者模式主要是将行为作为观察者,将数据变动作为触发机制。观察者通过引用数据实现的。观察者的示例可以参考这里:

https://www.runoob.com/design-pattern/observer-pattern.html

7.将单向关联改为双向关联

两个类都需要使用对方的特性,但是其间只有一条单向关联。添加一个反向指针,并使得修改函数能够同时修改两条连接。这块请细品,看一下人家this是怎么用的。是否有种空灵的感觉

8.将双向关联改为单向关联

双向关联变单向关联和上边的情况相反,上边所做的就是反向指针,这边就是不要那个反向指针。具体操作就是看到指针就想办法去掉吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值