• 含义:
    某个函数为了实现其功能,经常从另一个类中获取大量数据。比起自身所在的类来说,更加依赖于另一个类
  • 坏处:
    代码结构混乱,类分功不明确,可能造成其他坏味道。
  • 目标:
    确定类的具体作用,并合理摆置每个函数所在的类。
  • 实现方法:
    • 考虑使用Move Method(搬移函数),如果只有函数内的一部分特别依赖其他类,先使用Extract Method(提炼函数), 再考虑使用Move Method(搬移函数)
    • 如果一个函数用到了多个类的功能,那需要判断哪个类拥有最多被此函数使用的数据,把这个函数和数据摆在一起,使用Extract Method(提炼函数) 将函数分解为数个较小的函数,并分别放置在不同的位置。
    • 如果某些设计模式(比如策略模式,委托模式)看起来破坏了此规矩,考虑将总是变化的部分和不怎么变化的部分分开,保持变化只在一地发生。

本文涉及的重构方法

Move Method(搬移函数)

Extract Method(提炼函数)

简单易懂读《重构》 - Feature Envy (依恋情结)相关推荐

  1. 3.7 Feature Envy 依恋情结

    数据本身和对数据的操作没有包装在同一个类中,则形成依恋情结 方法对某个类的兴趣大于对自己所处类的兴趣 使用 7.1 Move Method 迁移方法 将该方法移至他应该属于的类 方法的一部分更适合于其 ...

  2. 3.7 Feature envy(依恋情结)

    函数对某个类的兴趣高过对自己所处类的兴趣. 一个函数往往会用到几个类的功能,那么它究竟该被置于何处呢?判断哪个类拥有最多被此函数使用的数据,然后就把这个函数和那些数据摆在一起. 将总是一起变化的东西放 ...

  3. 简单易懂读《重构》 - Speculative Generality (高估未来的可能性)

    含义: 高估未来的扩展性,添加过多不必要的类,方法或继承体系 坏处: 不利于程序维护,可读性差 目标: 依现实来重新评估,去除多余的代码部分. 实现方法: 使用Collapse Hierarchy ( ...

  4. 简单易懂读《重构》 - Primitive Obesession (基本类型偏执)

    含义: 以类代替原本单独存在的数值 坏处: 单独存在的数值不易于理解,也不符合面向对象的思想. 目标: 使数值尽量用类代替,就像java中的基本类型那样. 实现方法: 单独存在的数据值,考虑使用Rep ...

  5. 简单易懂读《重构》 - Inappropriate Intimacy(不合适的亲昵关系)

    不合适的亲昵关系 含义: 两个类间互相依赖,总是调用对方的过多属性. 坏处: 代码耦合度高,破坏类的独立性 目标: 把联系过分紧密部分搬移或者建立新类放在其中. 实现方法: 使用Move Method ...

  6. 代码坏味道 之 7 依恋情结 feature envy

    <重构:改善既有代码的设计>中提到过一些代码的坏味道,针对这些坏味道,需要进行重构. 依恋情结 feature envy 问题1: 函数对某个类的兴趣搞过对自己所处类的兴趣.某个函数为了计 ...

  7. 用重构指导Clean Code(二):依恋情结和switch语句

    书接上回,我们继续聊如何用重构指导Clean Code. 在Clean Code的3.4节中有这样一段代码(代码清单3-4).(第3章主要讲的是函数,而3.4节讨论的是switch语句.) publi ...

  8. 【从本人QQ空间迁移】重构“依恋情结”(以黑名单的新增编辑为例)

    本次黑名单新增编辑方法也是使用上次说的form,关于form不再阐述. /*跳转至新增.修改页面*/ public ActionForward turnToEditBlack(ActionMappin ...

  9. 代码坏味道与重构之霰弹式修改和依恋情结

    文章目录 1. 霰弹式修改 2. 依恋情结 1. 霰弹式修改 定义:指每遇到某种变化,你都必须在许多不同的类内做出许多小修改. 影响:需要修改的代码散落各处,难以找到他们,容易修改遗漏. 重构目标:代 ...

最新文章

  1. android中文字中间有超链接的实现方法
  2. sql limit 的用法
  3. 这个3月我有3场见面会,不知道你来不来?
  4. linux ssd hdd 缓存,ArchLinux 部署 SSD 缓存
  5. git使用的基本流程_我并不是高冷(Git进行中01):git基本流程简介
  6. intel cpu 漏洞 linux,Intel CPU架构漏洞越捅越大:打补丁将损失30%性能
  7. 计算机语言9月排行榜,TIOBE 9月编程语言排行榜发布,C+增速最快
  8. 纯新手DSP编程--5.22-总结
  9. nmap识别TCP端口服务的数据库
  10. 在虚拟机中安装雨林木风XP镜像的正确步骤
  11. MySQL快速学习入门
  12. windows连接vpn无法连接网络解决
  13. MSVCRTD.lib重复定义问题
  14. vs各个版本的编译器号对应的vs版本号
  15. 知识点:matplotlib绘图的线条设置以及颜色设置
  16. win7安装oracle 黑屏,苹果电脑装Windows7黑屏的原因和解决方案
  17. android 的soundpool播放声音
  18. 任意多边形的面积(C语言)
  19. 基于PHP的客户分销商管理系统
  20. 用开源中国(oschina)Git管理代码(整合IntelliJ 13.1.5)

热门文章

  1. 电脑突然断电蓝屏导致Git错误的一种解决办法
  2. iOS图片转成视频方法
  3. Unity游戏开发——向量运算(点乘和叉乘)
  4. svn没有绿色的对勾处理
  5. 2021-10-19大数据学习日志——数据埋点+网络爬虫——前端开发入门
  6. Android Studio代码迁移问题小汇总
  7. 我在前锋培训的日子第二天
  8. 多台计算机共享内存_共享内存多处理器和指令执行| 计算机架构
  9. FBI 网站被黑,泄露数据已在 Pastebin 公布
  10. 互联网让FBI走下神坛