建议154:不要过度设计,在敏捷中体会重构的乐趣

有时候,我们不得不随时更改软件的设计:

  • 如果项目是针对某个大型机构的,不同级别的软件使用者,会提出不同的需求,或者随着关键岗位人员的更替,需求也会随个人意志有所变更。
  • 如果竞争对手增加了新需求,我们也不得不为正在研发的新产品调整设计方案。
  • 刚开始的架构太糟糕了,这可能源于设计经验的不足或者架构师的不负责任。

以上分别从外部和内部描述了必须修改需求和设计的几种场景。也就是说,在软件开发过程中,变化几乎总会发生。

为了捕捉需求上的不断变化,软件开发必须变得足够“敏捷”。设计也应该停留在“高层次”上,具有指导作用,而功能模块(或者说代码)则需要逐步改进。我们把改进的过程称为“重构”.

传统的瀑布开发由于不能满足需求的变化,在软件领域被各类敏捷开发框架所取代。

敏捷开发模式把整个开发过程分成了一个一个的迭代,每个迭代的周期大概是两周到一个月。每个迭代大致分为如下几个步骤。

敏捷开发使用“用户故事”(User Story,在TFS敏捷规范中,它被归类到BackLog)来核定需求和工作量指标。在一个迭代开始的时候,开发团队应该挑选用户故事作为本次迭代的目标;而在每一次迭代结束的时候,用户故事应该开发完毕。整个开发部门必须发布一个可以运行的版本交付给客户(对象可以是真实的用户,也可以是团队运营部门)。这有助于客户及时调整他们对产品的预期,并修正可能存在的需求变动。而作为开发团队,也可以根据客户的反馈修正需求,甚至是设计。

正是因为敏捷开发拥抱变化,所以站在整个开发流程来看,设计应该是可以修改的,而落实到代码上来,也就是重构的地位提升了。在敏捷开发体系中,我们可以将其作为一个任务(Task)引入整个开发流程中。

作为一个团队,需要定期审视模块是否可以被重构。而作为开发人员,建议一旦嗅到代码的坏味道,就需要重构我们的代码。

我们不追求让代码第一个版本就保持非常整洁的程度,那不现实,而且会让开发者觉得无从下手。当然,我们更不应该让繁杂的代码永远保持在第一个版本的状态,那样的代码,让我自己都不满意。

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

编写高质量代码改善C#程序的157个建议——建议154:不要过度设计,在敏捷中体会重构的乐趣的更多相关文章

  1. 编写高质量代码改善C#程序的157个建议[1-3]

    原文:编写高质量代码改善C#程序的157个建议[1-3] 前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理 ...

  2. 读书--编写高质量代码 改善C#程序的157个建议

    最近读了陆敏技写的一本书<<编写高质量代码  改善C#程序的157个建议>>书写的很好.我还看了他的博客http://www.cnblogs.com/luminji . 前面部 ...

  3. 编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试

    建议157:从写第一个界面开始,就进行自动化测试 如果说单元测试是白盒测试,那么自动化测试就是黑盒测试.黑盒测试要求捕捉界面上的控件句柄,并对其进行编码,以达到模拟人工操作的目的.具体的自动化测试请学 ...

  4. 编写高质量代码改善C#程序的157个建议——建议156:利用特性为应用程序提供多个版本

    建议156:利用特性为应用程序提供多个版本 基于如下理由,需要为应用程序提供多个版本: 应用程序有体验版和完整功能版. 应用程序在迭代过程中需要屏蔽一些不成熟的功能. 假设我们的应用程序共有两类功能: ...

  5. 编写高质量代码改善C#程序的157个建议——建议155:随生产代码一起提交单元测试代码

    建议155:随生产代码一起提交单元测试代码 首先提出一个问题:我们害怕修改代码吗?是否曾经无数次面对乱糟糟的代码,下决心进行重构,然后在一个月后的某个周一,却收到来自测试版的报告:新的版本,没有之前的 ...

  6. 编写高质量代码改善C#程序的157个建议——建议153:若抛出异常,则必须要注释

    建议153:若抛出异常,则必须要注释 有一种必须加注释的场景,即使异常.如果API抛出异常,则必须给出注释.调用者必须通过注释才能知道如何处理那些专有的异常.通常,即便良好的命名也不可能告诉我们方法会 ...

  7. 编写高质量代码改善C#程序的157个建议——建议152:最少,甚至是不要注释

    建议152:最少,甚至是不要注释 以往,我们在代码中不写上几行注释,就会被认为是钟不负责任的态度.现在,这种观点正在改变.试想,如果我们所有的命名全部采用有意义的单词或词组,注释还有多少存在的价值. ...

  8. 编写高质量代码改善C#程序的157个建议——建议151:使用事件访问器替换公开的事件成员变量

    建议151:使用事件访问器替换公开的事件成员变量 事件访问器包含两部分内容:添加访问器和删除访问器.如果涉及公开的事件字段,应该始终使用事件访问器.代码如下所示: class SampleClass ...

  9. 编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法、Lambda表达式代替方法

    建议150:使用匿名方法.Lambda表达式代替方法 方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐.比如: static void SampeMethod() { List< ...

随机推荐

  1. mac环境下IDEA无法下载plugin或者自动下载Library

    卧槽,原谅我这么晚还在写blog,明天早上还要上班. 问题,idea 新建springmvc无法自动下载lib,报这个: you have JVM property "https.proxy ...

  2. Install MongoDB Community Edition on Ubuntu

    Install MongoDB > Install MongoDB Community Edition > Install MongoDB Community Edition on Lin ...

  3. Web(Easy UI)

    HTML菜鸟教程 http://www.runoob.com/html/html-tables.html EasyUI combobox下拉多选框的实现 https://www.cnblogs.com ...

  4. g++ 4.4.7 template 没问题,前面应该程序问题!!

  5. jQuery基本API小结(下)---工具函数-基本插件

    一.工具函数 1.获取浏览器的名称与版本信息 在jQuery中,通过$.browser对象可以获取浏览器的名称和版本信息,如$.browser.chrome为true,表示当前为Chrome浏览器,$ ...

  6. System.Drawing.Text.TextRenderingHint 的几种效果

    ; i < ; i++) { g5.TextRenderingHint = (System.Drawing.Text.TextRenderingHint)i; string txt; ; txt ...

  7. [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹

    原文 张丹-小桥流水,C#2010 在TreeView控件下显示路径下所有文件和文件夹 C#2010学习过程中有所收获,便总结下来,希望能给和我一样在学习遇到困难的同学提供参考. 本文主要介绍两个自定 ...

  8. VS2015编译VLC2.2.1(under WIN7-64)<转>

    概述: 感谢https://github.com/sunqueen/vlc-2.2.1.32-2013 这个工程,我的工作基本上都是基于它,我只是觉得他的工程设置不够清晰,重新做了一次.区别在于我的工 ...

  9. mybatis与springdata的一些简单比较与思考

    主题 最近在用mybatis做项目,有一些感触想记录下,主要是mybatis(以及它的一些插件)相比较于Spring data(或者jpa,hibernate等)的优势地方. 感触 我觉得mybati ...

  10. ubuntu16.04挂载windows NTFS磁盘方法

    sudo fdisk -l 查看所有磁盘分区 mount命令 mount -t ntfs /dev/sdb3 /mnt/share -o iocharset=utf8,umask= 修改/etc/fs ...