重构 改善既有代码的设计(读书笔记3)

《重构 改善既有代码的设计》读书笔记及心得体会 《重构 改善既有代码的设计》读书笔记及心得体会第一章 重构 第一个案例 重构的第一步,为即将修改的代码建立一组可靠的测试环境。 过程和方法对于项目的结果只有次要的影响,首要的影响是人 没有可靠的测试环境就不要进行代码的重构,那么问题来了: - 什么是可靠的测试环境? 在第四章给出回答 重构时,每次修改的幅度要小,这样便于进行测试发现错误。 这是本书中贯穿始终的 阅读详情

        // 在对象之间搬移特性

// 1.在程序中,有个方法与其本类之外的另一个类进行更多的交流,这个时候在该方法最常引用的类中建立一个有着类似行为的新方法,把旧方法变成一个委托函数,或者是直接移除。这有助于隔离变化。
// 2.移动实例变量可以参考第一点
// 3.搬动一个方法或者属性之前,先注释它,可以瞬间看出一些东西。
// 4.当一个类做了应该由两个类做的事情,那么,就提炼一个新类。
// 5.当类的功能很弱化,而且使用地方单一的话,内部类是一个好的方式
// 6.良好的封装可以降低对象的调用层次,而且对于变化控制在一定的范围类。代理是良好封装的一种方式。
// 7.当服务类不能满足我们的需求,但是我们又不能修改服务类的时候,可以建立一个新类,新类是服务类的子类或者包装类,给它添加一些新的接口,来满足我们的需求。


// 重新组织对象

// 8.如果给属性提供get/set方法,那么,就在任何访问对象的地方都是用get/set方法。
// 9.当一个简单的属性不能满足需求的时候,就是用对象来完成。考虑一种情况:你开始使用String表示一个电话号码,后来要格式化电话号码,这个时候大部分人采用的方式是工具方法……(过程式编程)
​基于stm32的智能空气加湿器设计(含源代码和Proteus仿真) 课程设计分享 阅读详情

相关推荐

机器学习---xgboost算法

问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。成和剪枝分别对应了经验风险最小化和结构风险最小化, XGBoost的决策树生成是结构风险最小。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。出结果, 是模型的输出结果;等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这里。其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情。最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。的正则化项是K棵树的正则化项相加而来的。

weixin_43961909的博客 1万+

读书笔记 -《重构-改善既有代码的设计》Part3

文章目录读书笔记 -《重构-改善既有代码的设计》Part3重新组织函数Extract MethodInline MethodInline Temp - 内联临时变量Replace Temp with QueryIntroduce Explaining Variable 引入解释性变量Split Temporary Variable 分解临时变量Remove Assignments to Parameters 移除对参数的赋值Replace Method with Method Object 以函数对象取代函

whose book 的博客 369

Simulink与C/C++的无缝对接:自定义结构体变量导入实战指南

本文详细介绍了如何将C/C++自定义结构体导入Simulink环境,实现无缝数据对接。通过编写标准C头文件、配置MEX编译环境(如MinGW),并利用`Simulink.importExternalCTypes`函数,可将结构体转换为Simulink Bus对象,从而提升复杂系统模型的可读性、可维护性及仿真与代码生成效率。

weixin_29093017的博客 481

重构改善既有代码的设计—— 读书笔记3

当我们对代码理解不够深刻时,往往会感觉 重构改善既有代码的设计 这本书的内容过于浮夸,颇有“初闻不知曲中意,再闻已是曲中人”之感. 但根据个人经验,还是希望能尽早地运用其中的一些技巧。 该篇文章的内容主要来自于书中的第6章——重新组织函数 文章目录1. 提炼函数(Extract Method)优化版本1:优化版本2:优化版本3:2. 内联函数(Inline Method)3. 内联临时变量(Inl...

BertKing的专栏 206

DSP28335与Vofa+上位机通信实战:SCIb配置避坑指南(附完整代码)

本文提供DSP28335与Vofa+上位机通信的实战指南,重点解析SCIb模块配置的常见问题与解决方案。针对研旭开发板的硬件连接、波特率精确计算、FIFO高效使用以及FireWater协议封装进行了详细说明,并附有完整代码,帮助开发者快速实现实时数据可视化与波形分析,提升调试效率。

weixin_29172963的博客 150

ROS2 -Jazzy 一步一步(第一步_工作空间以及编译)

文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖和编译顺序一条命令就能编译整个工作空间。

jerrykorea的博客 1380

《重构:改善既有代码的设计》读书笔记:前3章名言以及自己感悟

重构 “重构”指的是一种对代码结构的改善。这种改善: 不会改变代码的外在行为。 不会让代码效率更高(准确来说,效率可能会变低) 会让代码设计变得更 好 。而代码怎么算是 好 ,以及怎样才能变 好,就是本书所讨论的内容。 本书目录: 第1章,用一个实例来说明什么是“重构”。 第2章,讨论“重构”的一些概念。例如:什么是重构、重构与新功能、重构与架构、为何要重构、何时重构、重构面临的挑战、重构与性能 等等。 第3章,代码的“坏”味道,讨论一个 坏 代码的表现。 第4章,强调构建“自测试体系”的重要性。 第

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 668

k8s 100个高频面试题

以下是 100 个 Kubernetes(k8s)高频面试题及其答案,涵盖了 Kubernetes 的核心概念、架构、组件、工作原理以及实际应用。答案:Master 节点组件:API Server:提供 RESTful API 接口,用于与集群交互。etcd:分布式键值存储,用于存储集群的配置数据和状态信息。Controller Manager:运行各种控制器进程,负责维护集群的状态。Scheduler:负责将 Pod 调度到合适的节点上运行。Worker 节点组件:Kubelet:运行在每个节点上的代理,

wankll的专栏 2777

[读书笔记] 重构改善既有代码的设计(3)

继续整理本书的内容。第四章:构建测试体系。关于测试体系的几条参考准则: 1. 确保所有的测试都完全自动化,让他们检查自己的测试结果。 2. 一套测试就是一个很强大的bug侦测器,能够大大的缩减查找bug所需的时间。 3. 频繁的运行测试,每次编译请把测试也考虑进去,至少每天执行一遍每一个测试。 4. 每当收到bug报告,请先写一个单元测试来暴露bug。 5. 编写未臻完善的测试并实际运行,

beyongwang的博客 503

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 349

华为OD面试八股真题 - 操作系统相关 - 2

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 967

『重构--改善既有代码的设计』读书笔记----代码坏味道【3】

星期六了,适当出去放松了下,回来继续我们重构的话题。今天是坏味道【3】了,很多朋友跟我私信,叫我把坏味道出完,再出手法。其实这是有道理的,很多时候,"发现"远比"怎么做"重要的多。就拿设计模式来讲,GoF里面的设计模式相信有很多人都了解过。具体的设计模式应该怎么实现啊相信有很多人都背的滚瓜烂熟,但问题的难点往往在于你应该什么时候用这个设计模式。重构也一样,手法步骤都是死的,关键在...

weixin_30651273的博客 103

在 Zynq 7010 上运行 VxWorks 7.0 的详细流程【持续更新】

本文介绍了在Zynq 7010开发板上运行VxWorks 7.0的完整流程。主要包括:1)使用Vivado创建硬件设计,配置Zynq模块并生成比特流文件;2)通过Workbench 4创建VxWorks工程,配置启动参数并生成镜像;3)下载运行步骤。此外还讲解了使用Workbench 4开发VSB和VIP工程的方法,包括工程创建、配置和调试流程。文中提供了关键操作截图和注意事项,为开发者提供了完整的Zynq 7010平台VxWorks开发解决方案。

weixin_45397344的博客 1223

《重构-改善既有代码的设计》读书笔记

重构,第一个案例 1.1 起点 如果发现现有的代码结构使你无法很方便地添加新特性,那就先重构,使特性的添加比较容易进行后,再添加特性; 1.2 重构的第一步 为即将修改的代码建立可靠的测试环境 – 是人就会犯错,所以需要可靠的测试; 测试结果能够自我检验 – 成功”OK”,失败列出失败清单并打印行号 (自动化对比测试结果是提高效率的前提); 1.3 分解并重组”巨型

在路上 1578

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

重构,改善既有代码的设计(理论篇)

本文是笔者毕业后的第一篇blog,将从三个方面讨论代码重构。即:1.代码重构是什么;2.常用的重构手法;3.代码中的“坏味道”。本篇blog是《重构,改善代码既有代码的设计》一文的读书笔记,读书笔记与书一起食用效果更佳哦。

云瀚的自习室 4476

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

《重构:改善既有代码的设计》读书笔记(持续更新中)

背景(我也不知道这个算不算读书笔记,书本知识点整理和个人理解内容可跳至下面正文): 最近过年加找工作一直没想起来整理学习内容, 时间都很零碎。回想一下, 的确一直以来都是为了完成项目去看知识点。 除了刚开始想转行做IT的时候跟着慕课网的两条前后端路线系统地学习了一下, 但是终究囫囵吞枣。 前几天刚好有被问到《重构》这本书的内容。这两天临时抱佛脚看一下。 有了一定量的代码量积累的现在, 带着些许...

yytoo2的博客 2459

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

重构,改善既有代码的设计(实战篇)

程序员必懂的代码重构(理论篇)一文介绍了代码重构是什么、常用的重构手法和代码中的“坏味道”。But talk is cheap. Show me the code,本文将从实战的角度来谈谈代码重构,共分为:题目、初步解法、重构实战和总结四部分。

云瀚的自习室 4982

重构改善既有代码的设计—— 读书笔记

虽然本人是计算机专业 毕业,但是也学过软件工程这本课程的。但是在开发这几年中,听到架构二字,心中总是充满敬畏。 后来和公司后端部门的架构师聊了以后,发现其实架构并没有那么神秘,给我的建议是——人人都可以做架构师。最起码一位合格的程序员都要有一颗做架构师的心。 拿破仑曾说—— 不想做将军的士兵不是好士兵。重构项目之后,也有了一些心得体会,所以再来拜读重构改善既有代码的设计 这本业内经典。 1. Wh...

BertKing的专栏 257

《重构:改善既有代码的设计》读书笔记

重构原则 1、重构的定义 名词:Refactoring是对软件内部结构的一种调整,目的是在不改变外部行为的前提下,提高其可理解性,降低其修改成本; 动词:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。 2、重构的好处 改进软件的设计:时间长了,随便添加新功能,已经看不出原有的设计,难以维护; 使软件更容易理解:重构的过程也可以理解代码; 帮助找到bug:“我不是...

lihaidong的博客 464

【读书笔记】重构 改善既有代码的设计

重构(refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构

lbh_paopao的博客 724

《重构 改善既有代码的设计》 读书笔记(六)

1. 状态/策略取代类型码(8.15 Replace Type Code with State/Strategy) 要转换成状态模式(或策略模式)前,需要确保任何时候都能通过取值函数和设值函数来访问对象变量,这叫做自封装字段(8.1 Self Encapsulate Field)。 所以我们要把Movie中直接引用字段的地方改为通过getter和setter方法调用: //在这里仅在构造方法中直接使用变量 public Movie(String title, int priceCode) { super(

NewReErWen的博客 823

《重构 改善既有代码的设计》 读书笔记(十二)

3.8 数据泥团(Data Clumps) 在‘3.2 过长函数’中,我们第一次提到‘数据泥团’这个东西。 数据泥团:总是绑在一起出现的数据,就好像一家人一般。 当数据泥团出现时,我们就要考虑,是否应该把它们组合成一个类,这样是否合适,如果确定要组合,那么要参考以下方法: 提炼类(7.3 Extract Class):相关字段放到一个新类中。 引入参数对象(10.9 Introduce Parameter Object):用对象代替多个参数。 保持对象完整(10.7 Preserve Who

NewReErWen的博客 544

【《重构 改善既有代码的设计》学习笔记5】重构列表

本篇文章的内容来自《重构 改善既有代码的设计》一书学习笔记整理并且加上自己的浅显的思考总结! 重构列表,为重构提供一个坚实的起点,支持后面的重构工作! 1、重构的记录格式 书中说:每个重构手法都有如下五个部分。 名称(name),建造一个重构词汇表,名称是很重要的。 简单的概要(summary),介绍此重构手法的使用情景,以及它做的事情。 动机(motivation),为什么需要这...

阿飞云漫步 794

《重构 改善既有代码的设计》 读书笔记(十一)

3.4 过长的参数列(Long Parameter List) 将方法中所需的所有东西都以参数的形式传递进去,这很好理解,因为那些参数都是方法中必要的部分,但正因如此,才会有‘过长的参数列’这种坏味道。 面向对象解决了一部分问题——方法所需的东西不一定要以参数形式传递,在方法的内部可以通过一个对象来自己调用获取这些参数。 太长的参数列难以理解,太多参数容易造成前后不一致,不易使用,也不易修改。 在‘3.2 过长函数’中,我们已经提及过这种坏味道以及对应重构的方法,在这里重新介绍一下。 每一次回顾都是有必

NewReErWen的博客 495

重构,改善既有代码的设计(第2版)读书笔记

背景 如同改代码、阅读代码,我们需要明确自己所工作的GIT仓库对应的分支一样,我们也记录下所阅读的书籍信息。 书名:《重构,改善既有代码的设计(第2版)》 作者:【美】马丁•福勒(Marthin Fowler)著 译者:熊节 林从羽 译 出版社:中国工信出版集团 人民邮电出版社 印刷版次:2019年5月第1版 说明 在阅读本笔记时如果发现有任何不合适的地方欢迎评论,因为每个人对同一...

妙法化城 708

《重构:改善既有代码的设计》读书笔记(上)

重构:改善既有代码的设计

行走 1475
上一篇: 系统架构方面的博客
下一篇: 代码整洁之道
coding_or_coded
博客等级 码龄16年 216粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值