当前位置: 首页 > news >正文

第8章 搬移特性

8.1 搬移函数

        模块化是优秀软件设计的核心所在,好的模块化能够让我在修改程序时只需理解程序的一小部分。为了设计出高度模块化的程序,我得保证互相关联的软件要素都能集中到一块,并确保块与块之间的联系易于查找、直观易懂。同时,我对模块设计的理解并不是一成不变的,随着我对代码的理解加深,我会知道那些软件要素如何组织最为恰当。要将这种理解反映到代码上,就得不断地搬移这些元素

       任何函数都需要具备上下文环境才能存活。这个上下文可以是全局的,但它更多时候是由某种形式的模块所提供的。对一个面向对象的程序而言,作为最主要的模块化手段,其本身就能充当函数的上下文;通过嵌套的方式,外层函数也能为内层函数提供一个上下文。不同的语言提供的模块化机制各不相同,但这些模块的共同点是,它们都能为函数提供一个赖以存活的上下文环境。

       搬移函数最直接的一个动因是它频繁引用其他上下文中的元素,而对自身上下文中的元素却关心甚少。此时,让它去与那些更亲密的元素相会,通常能取得更好的封装效果,因为系统别处就可以减少对当前模块的依赖。

        同样,如果我在整理代码时,发现需要频繁调用一个别处的函数,我也会考虑搬移这个函数有时你在函数内部定义了一个帮助函数,而该帮助函数可能在别的地方也有用处,此时就可以将它搬移到某些更通用的地方。同理,定义在一个类上的函数,可能挪到另一个类中去更方便我们调用。

决定越难做,通常说明搬移这个函数与否的重要性也越低

8.6 移动语句 

        让存在关联的东西一起出现,可以使代码更容易理解。如果有几行代码取用了同一个数据结构,那么最好是让它们在一起出现,而不是夹杂在取用其他数据结构的代码中间。最简单的情况下,我只需使用移动语句就可以让它们聚集起来。此外还有一种常见的“关联”,就是关于变量的声明和使用。有人喜欢在函数顶部一口气声明函数用到的所有变量,我个人则喜欢在第一次需要使用变量的地方再声明它。

        通常来说,把相关代码搜集到一处,往往是另一项重构(通常是在提炼函数(106))开始之前的准备工作。相比于仅仅把几行相关的代码移动到一起,将它们提炼到独立的函数往往能起到更好的抽象效果。但如果起先存在关联的代码就没有彼此在一起,那么我也很难应用提炼函数(106)的手法。

 

http://www.lryc.cn/news/505186.html

相关文章:

  • ARM/Linux嵌入式面经(五九):海尔
  • java中的List、数组和set
  • freeswitch(配置文件结构)
  • ARMS 用户体验监控正式发布原生鸿蒙应用 SDK
  • 使用 esrally race 测试 Elasticsearch 性能:实践指南
  • OkHttp源码分析:分发器任务调配,拦截器责任链设计,连接池socket复用
  • 中国计算机学会计算机视觉专委会携手合合信息举办企业交流活动,为AI安全治理打开“新思路”
  • 重生之我在异世界学编程之C语言:深入预处理篇(上)
  • dolphinscheduler服务RPC框架源码解析(二)RPC核心注解@RpcService和@RpcMethod设计实现
  • 【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string
  • ARCGIS国土超级工具集1.2更新说明
  • 暂停window11自动更新
  • Git简介和特点
  • 如何通过docker 部署minio,端口号为9105
  • 设置Qt程序开机自启动(windows版本)
  • 【HarmonyOS】鸿蒙获取appIdentifier,Identifier
  • 【Rust自学】3.5. 控制流:if else
  • 美国信息学奥林匹克竞赛USACO 2024年12月比赛铜级问题1. 循环舍入-答案代码
  • Llama3模型详解 - Meta最新开源大模型全面解析
  • 2021-02-12 c++里面cin.sync()函数的意思
  • 下载红米Note 9 Pro5G对应的LineageOS代码下载及编译
  • 《探索 Caffe2 的 C++接口在移动设备上的性能优化之路》
  • 1.编写一个程序,给定一个大写字母,要求用小写输出
  • 条件随机场(CRF)详解:原理、算法与实现(深入浅出)
  • Android Studio、JDK、AGP、Gradle、kotlin-gradle-plugin 兼容性问题
  • 防抖(Debounce)和节流(Throttle)的区别和应用场景
  • 前端 Code Review 常见问题
  • Python监控AWS ECS集群和服务的CPU和内存利用率
  • 淘宝天猫API接口深度解析:如何高效利用商品详情与关键词搜索商品列表功能
  • python快速接入阿里云百炼大模型