重构

极限编程

不打扰是莪最后的温柔 提交于 2020-01-26 02:51:53
概述 敏捷方法论有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法。正是因为“轻量级”感觉没有什么力量,不但不能够有效体现灵活性,反而显得是不解决问题的方法论似的。因此,就有了一次划时代的会议,创建了敏捷联盟。 在敏捷方法论领域中,比较知名的、有影响力的,是拥有与 Microsoft 的操作系统相同缩写语——XP的极限编程(eXtreme Programming)。极限编程方法论可以说是敏捷联盟中最鲜艳的一面旗帜,也是被研究、尝试、应用、赞扬、批判最多的一种方法论,也是相对来说最成熟的一种。 这一被誉为“黑客文化”的方法论的雏形最初形成于1996—1999年间,Kent Beck、Ward Cunninggham、Ron Jeffrey 在开发 C3 项目(Chrysler Comprehensive Compensation)的实践中总结出了 XP 的基本元素。在此之后,Kent Beck 和他的一些好朋友们一起在实践中完善提高,终于形成了极限编程方法论。 解析极限编程 那么什么是 XP 呢?XP 是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式。与其他方法论相比,其最大的不同在于: 在更短的周期内,更早地提供具体、持续的反馈信息。 在迭代的进行计划编制

我的reshape观

旧街凉风 提交于 2020-01-24 14:06:55
reshape(1,2)把结果分成1块,每一块2个元素 reshape(2,1)把结果分成2块,每一块1个元素 reshape(-1,1)把结果分成任意块,每一块1个元素 reshape(1,-1)把结果分成1块,这一块里面放所有的元素 reshape(4,3,2)把结果分成4块,每一块3个元素,做出一个2维的 reshape(a,3,2)在a中取数据,分成3块,每一块2个元素 reshape(A,[2,3]) 将 A 重构为一个 2×3 矩阵 reshape(A,2,3,4)将 A 重构为一个 2×3x4矩阵,与reshape(A,[2,3,4])相同 reshape(A,2,[ ])将 A 重构为一个 2×?矩阵 在这里面占位符[ ] 只能使用一次。 关于如何查看数据大小,请直接使用A.shape()的方法即可 all in all 如果你把我说的x块理解为x行,把y个元素理解为y列,那就是其他教程的说法了,只是这样有时难以构想 最基本的就是reshape(x,y)把结果分成x块,这一块里面放y元素 如有任何错误或者不理解的地方,烦请在下发留言处回复,感谢🙏 举一个例子 行向量: a = [1 2 3 4 5 6] 执行下面语句把它变成3行2列: b = reshape(a,3,2) 执行结果: b = 1 4 2 5 3 6 来源: https://www.cnblogs

构建之法

橙三吉。 提交于 2020-01-24 09:35:19
构建之法阅读计划 周一下午阅读第1--3章, 周二晚上9--10点阅读4-5章 周三晚上9--10点阅读6--7章 周四下午4:20---5:20点阅读8--10章 周五下午2--4点10---13章 周六上午13--17章 粗略浏览一遍,周日进行问题发表 此外进行阅读《软件秘籍--设计那点事》几周时间进行阅读,内容多,一周3-5章. 问题1:“响应变化胜过遵循计划”,第一反应是排斥,我也认为“拥抱变化”的提出有取悦某些人的成分, 当然,作为一种方法论,想要推广,必须满足市场最大的需求,而这个行业最大的需求,就是业务的变化。那么如何相应变化呢? 问题2 : “重构的第一原则就是不要重构”么? 当需求变化的目标与一开始的代码很不兼容的时候,或者大幅度重构(工作量接近重写,而且重构没有重写那样顺畅的体验),或者采用“小修小补”的方式,以不断降低代码质量来“拥抱变化”,饮鸩止渴,至于“持续重构”,其风险和工作量又没人愿意承担。 问题3:那么响应变化,边想边做,是不是缺乏整体性的设计? 问题4: “不谋全局者,不足谋一域”,需求变化自有其范围,我们要做的是否应该是,在计划的过程中考虑到种种变化的可能性并预留出空间? 问题5: 这本书让人有情怀,对“古老的”瀑布教材或“舶来的”敏捷书籍,难免会缺乏信心:这东西行吗?适用于现代吗?适用于中国吗? 问题6:书中介绍“方法论‘是否是最佳实践方案?

找出那些代码里的坏味道吧——《重构》笔记(一)

◇◆丶佛笑我妖孽 提交于 2020-01-22 10:25:35
写在前面 重构起源于smalltalk,发扬于java和C#,它们都有成熟的重构工具。有一种说法是,《重构》和设计模式是java行业的圣经。我个人觉得,重构就像修缮忒休斯之船一样,只是我们是将船上的木板全部替换成了钢板。一个程序员如果看自己一年前写的代码而没有重构的念头,那么这个程序员可能这一年没有什么进步,当然也可能这块代码已经不需要重构了,但我想这种概率挺低的。 因为各种原因,没有人能在框架设计一开始就能套用设计模式写好,所以我们的代码需要不断的重构。Gof的设计模式就是重构的目标。但是重构也是必须有理论准备的,必须系统化的进行,否则可能引入不可察觉的错误,风险更大。 本文记录的重点只在于指出代码里的坏味道,如果在你的代码中“闻到”了这些坏味道就说明这块的代码可能需要重构了,至于怎么重构,书中有一套系统的方法,请期待后续的文章。 最后,希望重构能变成像空气和水一样普通的技术。 代码的坏味道有如厨房的油污,开始时不会觉得有多大的影响,但时间长了就会累积成“恶心”又难以“清除”的污渍。我们需要保持每天的清扫,而不是定期的“大扫除”。上面的“味道”就是一点一点的“油星”溅在“厨房”里,看到它们就顺手擦掉吧! 一、重构原则 1.重构的定义 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 重构(动词):使用一系列重构手法

超分辨率重构之SRCNN整理总结(七)

让人想犯罪 __ 提交于 2020-01-19 20:32:04
到此为止关于超分重建的理论部分八成已经作结,关于这个tensorflow版本的SRCNN的代码解读不知道究竟需要写到什么程度才可以完美收官。大家也都明白,这个东西若写太细,略显冗杂;若写太粗,略显不够明析。反正吧,尽可能的写清楚写明细。下面是我的GitHub代码仓库: https://github.com/XiaoYunChaos ,关于这篇的代码随后完整作结后我会上传至仓库,供大家讨论学习,欢迎star哦! SRCNN(tensorflow)详解分析 【1】首先,介绍一下项目结构: main.py 定义训练和测试参数,此后由设定的参数进行训练或测试。     model.py是模型文件以类的方式实现     utils.py是用来封装项目中的函数作为函数池     psnr.py是用来做评价函数的,功能就是进行计算评价指标 checkpoint文件夹是用来保训练模型,即chekpoint的路径 sample文件夹是样本路径 Train文件夹是训练集路径 Test文件夹是测试集路径,包含Set5与Set14 在看懂代码前,一定要明白一件事就是我们每一次训练实际上是训练图片的大小和输出图片等的大小等参数的设置。项目除了一般的预处理操作,还需要将图片分割,最后的训练完还做实验的时候还需要将图片结合起来。 【2】main.py 功能:定义训练和测试参数,包括:batchSize、学习率

从此重构

此生再无相见时 提交于 2020-01-19 03:27:01
设计是如此重要,那么开发者的基本设计能力与素质又从何下手来培养呢? 最好的办法,就是请个老师。从框架中了解,从系统中实现,从书文中汲取。然而,设计能力的提升绝非一朝一夕之功, 软件 开发中的设计大师,往往必须具备多年的修行方可称之为“架构师”。 一个在简历中轻描淡写的“ 10 年软件设计经验”,并非是所有软件人都能修炼成的真功夫,这里没有任何虚情假意可言。在一个项目的实现过程中,逐渐了解什么是对象、什么是对抽象 编程 、设计模式是如何应用在实际的系统架构、设计原则到底是什么秘密武器,而重要的是完成一个软件项目,对于更多人来说是认识一种软件开发的科学流程。这种体验,才是难能可贵的经验。在设计的广义概念里,几个必需的概念是应该首先被了解和认知的,以排名不分先后的原则罗列,它们大概包括: · 面向对象 ( Object-Oriented ),关于面向对象没有必要重复嚼舌了,本书的第 1 章“ OO 大智慧”中对 .NET 的面向对象进行了有别于其他专著的介绍,除了以实例突出面向对象之思想大成,还以浓墨铺陈了 .NET 是如何在底层 技术 上来实现继承、多态和接口映射等机制,从而使读者可以更加有效和深刻地把握面向对象之精髓。 · 面向服务 ( Service Oriented ), SO 至少是个时髦的话题, WCF 伴着 .NET 3.5 的发布,一个一统江湖的面向服务的基础架构横空出世

TODO的用法

人盡茶涼 提交于 2020-01-18 23:09:54
    在android开发中,我们经常会使用TODO来标记我们的代码,一般是用来表示待完成,或者待解决的部分。本文将详细介绍一下TODO的用法,及一些相关的扩展。(本文是在别人文章上做一点编辑,出处: http://blog.csdn.net/my_truelove/article/details/72857949 ) 一、TODO用法 1.添加TODO    2.查看TODO 在android studio左下角,有一个按钮,可以查看 如果没有 TODO tab,你可以通过左上角的菜单打开:View -> Tool windows -> TODO。 3.完成TODO   完成 TODO 标记的事件后,就可以删除该 TODO 注释。 二、FIXME用法   除了 TODO 标记,我们还可以使用 Android Studio 提供的 FIXME 来标记一些待修复的问题,FIXME 与 TODO 在本质上没有任何区别,只是不同的标记罢了。区别于 TODO 标记,FIXME 可以认为是偏向于标记存在问题的 TODO 事项。 一句话弄清二者区别: TODO 是总称,FIXME 是细分。 1.添加FIXME 其用法同 TODO,添加时如下: 然后同样在 TODO 视图中可以看到: 2.筛选FIXME    当项目中 TODO 和 FIXME 较多且混在一起时,找起来可就比较费尽了

机房重构---我们“重构”出了什么?

情到浓时终转凉″ 提交于 2020-01-18 05:15:32
机房重构立即就要结束了,在这“第三个”系统结束的时候,有必要思考一下我们重构的目的了。 或许有人说,还有什么目的呀,不就是编程语言换成了.Net,做出来,调完bug,能执行就得了呗。这么浮夸的日子里,还叫什么劲啊? 对于有这样的想法的人,我必须道一声:您(白)辛苦了 ! 不管做什么事,没有一点总结性思考是无法进步的。 我以下的一些重构论述或者说反思性总结也存在很多不足,希望大家多多指正,在此先致谢! 本文将从五个方面论述一下这次的重构系统,各自是系统架构、UML图指导、设计模式应用、数据处理和面向对象。 首先, 系统架构方面 。 在这次重构中,我们都运用了三层架构,目的是减少耦合,提高系统的重用性和可维护性等各种目的。在设计中,和第一次机房的基本面向过程编程相比,我们确实也深刻的体会到了有架构的方便和易维护。 通过加入外观、SqlHelper、配置文件等基本辅助模块或工具,我们再次体会到了独立的封装给我们带来的巨大便利,从解耦到封装,就看到了面向对象。 其次, UML图和文档的指导 。这次重点是放在了UML图上,用例图、包图、类图和时序图是关键。 包与”三层“、类图与三层中D层和B层的设计(不同的分类标准,如按数据库表还是功能进行B层设计)、时序图对功能运行过程的指导等都是密不可分,须要我们必须提前细致分析的。当然,这些都是建立在需求分析和用例设计之上的。 再次, 设计模式方面 。

Web最佳实践阅读总结(1)

妖精的绣舞 提交于 2020-01-17 21:22:16
介绍 最近开始刷一些书和题,此系列是介绍在读 Web最佳实践 的一些收获和体会。 web前端发展现状 存在问题: 代码组织混乱 代码格式的问题突出 页面布局随意 网站整体性能差,没有意识到应用诸如缓存,动态加载,脚本压缩,图片压缩等提高性能技术 推荐做法: 压缩样式表和脚本文件 减少HTTP请求次数 简洁和符合W3C标准的HTML和CSS代码能减少浏览器解析的时间,加快渲染过程 页面请求数量越少,相对页面的加载速度更快 在JS代码中选择性能更好的实现方案,如延迟加载,动态加载等技术; 延迟加载 <script type=”text/javascript” src=”" id=”my”></script> <script type=”text/javascript”> setTimeout(“document.getElementById(‘my').src='include/php100.php'; “,3000);//延时3秒 </script> 最后加载 引入外部js脚本文件时,如果放入html的head中,则页面加载前该js脚本就会被加载入页面,而放入body中,则会按照页面从上倒下的加载顺序来运行javascript的代码,所以可以把js外部引入的文件放到页面底部,来让js最后引入,从而加快页面加载速度 动态加载 <scrīpt src='' id="s1"><

代码重构

懵懂的女人 提交于 2020-01-17 00:40:58
一、为什么要代码重构(Refactoring) 在不改变系统功能的情况下,改变系统的实现方式。为什么要这么做?投入精力不用来满足客户关心的需求,而是仅仅改变了软件的实现方式,这是否是在浪费客户的投资呢? 代码重构的重要性要从软件的生命周期说起。软件不同与普通的产品,他是一种智力产品,没有具体的物理形态。一个软件不可能发生物理损耗,界面上的按钮永远不会因为按动次数太多而发生接触不良。那么为什么一个软件制造出来以后,却不能永远使用下去呢? 对软件的生命造成威胁的因素只有一个:需求的变更。一个软件总是为解决某种特定的需求而产生,时代在发展,客户的业务也在发生变化。有的需求相对稳定一些,有的需求变化的比较剧烈,还有的需求已经消失了,或者转化成了别的需求。在这种情况下,软件必须相应的改变。 考虑到成本和时间等因素,当然不是所有的需求变化都要在软件系统中实现。但是总的说来,软件要适应需求的变化,以保持自己的生命力。 这就产生了一种糟糕的现象:软件产品最初制造出来,是经过精心的设计,具有良好架构的。但是随着时间的发展、需求的变化,必须不断的修改原有的功能、追加新的功能,还免不了有一些缺陷需要修改。为了实现变更,不可避免的要违反最初的设计构架。经过一段时间以后,软件的架构就千疮百孔了。bug越来越多,越来越难维护,新的需求越来越难实现,软件的构架对新的需求渐渐的失去支持能力,而是成为一种制约