重构——25将双向关联改为单向关联(Change Bidirectional Association to Unidirectional)

简介: 将双向关联改为单向关联(Change Bidirectional Association to Unidirectional):两个类之间有双向关联,但其中一个类如今不再需要另一个类的特性;去掉不必要的关联

将双向关联改为单向关联(Change Bidirectional Association to Unidirectional)

两个类之间有双向关联,但其中一个类如今不再需要另一个类的特性;去掉不必要的关联

一、动机

1、维护双向连接,确保对象被正确创建和删除会增加复杂度

2、大量的双向连接很容易造成僵尸对象

3、双向关联增加了类或包之间的耦合

二、做法

1、找出保存“你想去除的指针”的字段,检查它的每一个用户,判断是否可以去除该指针

2、如果客户使用了取值函数,先运用Self Encapsulate Field将待删除字段自我封装起来,然后使用Substitute Algorithm对付取值函数,令它不再使用该字段,然后编译,测试

3、如果客户未使用取值函数,那就直接修改待删除字段的所有引用点:改以其它途径获得该字段所保存的对象,每次修改后,编译并测试

4、如果已经没有任何函数使用待删除字段,移除所有对该字段的更新逻辑,然后移除该字段

目录
相关文章
在powerdesigner中,一个table,怎么在diagram中创建多个symbol(多个模块都和同一个表相关联)
在powerdesigner中,一个table,怎么在diagram中创建多个symbol(多个模块都和同一个表相关联)
159 0
在powerdesigner中,一个table,怎么在diagram中创建多个symbol(多个模块都和同一个表相关联)
|
数据库
一对多关系domain Model中设置使用AutoMapper时出错
一对多关系domain Model中设置使用AutoMapper时出错
171 0
一对多关系domain Model中设置使用AutoMapper时出错
|
存储 iOS开发 开发者
追根问底:Objective-C关联属性原理分析
Objective-C是一种动态性很强的语言,所谓动态能力,也可以理解为运行时能力。对于Objective-C开发者来说,动态性所带来的编程便利无处不在。例如通过Category类别来扩展已有类的功能。可以使已有类拥有新的方法和属性。
169 0
|
缓存 Java 数据库连接
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
123 0
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
|
存储 Java 数据库连接
Hibernate的一对多映射的单向关联和双向关联(九)
Hibernate的一对多映射的单向关联和双向关联(九)
133 0
Hibernate的一对多映射的单向关联和双向关联(九)
|
SQL 存储 缓存
hibernate(六) cascade(级联)和inverse关系详解
写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也看不懂其中的关系,所以我自己写博文的时候,会尽量用通俗通俗在通俗的语言去描述一个概念,希望能尽自己的力量去帮助你们理解。光看我的是不行的,最关键的是要自己动手去实践一遍,能得出一样的结论,那就说明懂了,在我不懂的时候,我就去自己实现它,一次次尝试,慢慢的就总结出规律了。
135 0
|
SQL 数据库 关系型数据库
EFCore中如何移除主外键关系
目录 EFCore中如何移除主外键关系 场景介绍 主外键关系的问题 解决思路 禁止级联关系的生成 MicroFX.EntityFrameworkCore.RemoveForeignKey扩展 EFCore中如何移除主外键关系 场景介绍 我用EFCore写了一个blog程序,我要通过写文章来分享自己的知识,我定义了一个Article用来存放文章信息,我还定义了一个Category用来存放文章的分类,Category与Article是一对的关系。
3723 0
重构——24将单项关联改为双向关联(Change Unidirectional Association to Bidirectional)
将单项关联改为双向关联(Change Unidirectional Association to Bidirectional):两个类都需要对方特性,但其间只有一条单向连接;添加一个反向连接,并使修改函数能够同时更新两条连接
1417 0