编写高质量代码改善C#程序的157个建议——建议154:不要过度设计,在敏捷中体会重构的乐趣
建议154:不要过度设计,在敏捷中体会重构的乐趣
有时候,我们不得不随时更改软件的设计:
- 如果项目是针对某个大型机构的,不同级别的软件使用者,会提出不同的需求,或者随着关键岗位人员的更替,需求也会随个人意志有所变更。
- 如果竞争对手增加了新需求,我们也不得不为正在研发的新产品调整设计方案。
- 刚开始的架构太糟糕了,这可能源于设计经验的不足或者架构师的不负责任。
以上分别从外部和内部描述了必须修改需求和设计的几种场景。也就是说,在软件开发过程中,变化几乎总会发生。
为了捕捉需求上的不断变化,软件开发必须变得足够“敏捷”。设计也应该停留在“高层次”上,具有指导作用,而功能模块(或者说代码)则需要逐步改进。我们把改进的过程称为“重构”.
传统的瀑布开发由于不能满足需求的变化,在软件领域被各类敏捷开发框架所取代。
敏捷开发模式把整个开发过程分成了一个一个的迭代,每个迭代的周期大概是两周到一个月。每个迭代大致分为如下几个步骤。

敏捷开发使用“用户故事”(User Story,在TFS敏捷规范中,它被归类到BackLog)来核定需求和工作量指标。在一个迭代开始的时候,开发团队应该挑选用户故事作为本次迭代的目标;而在每一次迭代结束的时候,用户故事应该开发完毕。整个开发部门必须发布一个可以运行的版本交付给客户(对象可以是真实的用户,也可以是团队运营部门)。这有助于客户及时调整他们对产品的预期,并修正可能存在的需求变动。而作为开发团队,也可以根据客户的反馈修正需求,甚至是设计。
正是因为敏捷开发拥抱变化,所以站在整个开发流程来看,设计应该是可以修改的,而落实到代码上来,也就是重构的地位提升了。在敏捷开发体系中,我们可以将其作为一个任务(Task)引入整个开发流程中。
作为一个团队,需要定期审视模块是否可以被重构。而作为开发人员,建议一旦嗅到代码的坏味道,就需要重构我们的代码。
我们不追求让代码第一个版本就保持非常整洁的程度,那不现实,而且会让开发者觉得无从下手。当然,我们更不应该让繁杂的代码永远保持在第一个版本的状态,那样的代码,让我自己都不满意。
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
编写高质量代码改善C#程序的157个建议——建议154:不要过度设计,在敏捷中体会重构的乐趣的更多相关文章
- 编写高质量代码改善C#程序的157个建议[1-3]
原文:编写高质量代码改善C#程序的157个建议[1-3] 前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理 ...
- 读书--编写高质量代码 改善C#程序的157个建议
最近读了陆敏技写的一本书<<编写高质量代码 改善C#程序的157个建议>>书写的很好.我还看了他的博客http://www.cnblogs.com/luminji . 前面部 ...
- 编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试
建议157:从写第一个界面开始,就进行自动化测试 如果说单元测试是白盒测试,那么自动化测试就是黑盒测试.黑盒测试要求捕捉界面上的控件句柄,并对其进行编码,以达到模拟人工操作的目的.具体的自动化测试请学 ...
- 编写高质量代码改善C#程序的157个建议——建议156:利用特性为应用程序提供多个版本
建议156:利用特性为应用程序提供多个版本 基于如下理由,需要为应用程序提供多个版本: 应用程序有体验版和完整功能版. 应用程序在迭代过程中需要屏蔽一些不成熟的功能. 假设我们的应用程序共有两类功能: ...
- 编写高质量代码改善C#程序的157个建议——建议155:随生产代码一起提交单元测试代码
建议155:随生产代码一起提交单元测试代码 首先提出一个问题:我们害怕修改代码吗?是否曾经无数次面对乱糟糟的代码,下决心进行重构,然后在一个月后的某个周一,却收到来自测试版的报告:新的版本,没有之前的 ...
- 编写高质量代码改善C#程序的157个建议——建议153:若抛出异常,则必须要注释
建议153:若抛出异常,则必须要注释 有一种必须加注释的场景,即使异常.如果API抛出异常,则必须给出注释.调用者必须通过注释才能知道如何处理那些专有的异常.通常,即便良好的命名也不可能告诉我们方法会 ...
- 编写高质量代码改善C#程序的157个建议——建议152:最少,甚至是不要注释
建议152:最少,甚至是不要注释 以往,我们在代码中不写上几行注释,就会被认为是钟不负责任的态度.现在,这种观点正在改变.试想,如果我们所有的命名全部采用有意义的单词或词组,注释还有多少存在的价值. ...
- 编写高质量代码改善C#程序的157个建议——建议151:使用事件访问器替换公开的事件成员变量
建议151:使用事件访问器替换公开的事件成员变量 事件访问器包含两部分内容:添加访问器和删除访问器.如果涉及公开的事件字段,应该始终使用事件访问器.代码如下所示: class SampleClass ...
- 编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法、Lambda表达式代替方法
建议150:使用匿名方法.Lambda表达式代替方法 方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐.比如: static void SampeMethod() { List< ...
随机推荐
- 阶段性总结(PHP-JSON)
PHP JSON 本节我们将为大家介绍如何使用 PHP 语言来编码和解码 JSON 对象. 在没有json编码和解码之前,我们 html前台 和 PHP后台 之间的数据传输只能用字符串的方式传输. 但 ...
- CentOS7 安装Chrome
1. 下载Chrome浏览器的rpm包 https://www.chrome64bit.com/index.php/google-chrome-64-bit-for-linux 2. 安装Chrome ...
- java传递是引用的拷贝,既不是引用本身,更不是对象
java传递是引用的拷贝,既不是引用本身,更不是对象 2008-09-16 04:27:56| 分类: Java SE|举报|字号 订阅 下载LOFTER客户端 1. 简单类型是按值 ...
- 显示本月日历demo
import java.text.DateFormatSymbols; import java.util.Calendar; import java.util.GregorianCalendar; p ...
- vue+uwsgi+nginx部署项目
首先先下载好前后端项目 先从前端vue搞起 要在服务器上,编译打包vue项目,必须得有node环境 下载node二进制包,此包已经包含node,不需要再编译 wget https://nodejs.o ...
- Keil MDK 和 IAR 两款ARM开发工具区别比较
首先要说明,没有那款开发工具是万能的,也没有那款工具在所有方面都具有绝对优势.对于Keil MDK-ARM和IAR两款工具择,可以根据自己的习惯来选择,而不应该在使用其中的一款时贬低另外一款,或者总是 ...
- VS调试时JSON格式文件无法加载
VS调试时JSON格式文件无法加载 报错: 解决:在项目中的web.config中进行配置,configuration节中添加以下部份: <system.webServer> <st ...
- leetcode558
""" # Definition for a QuadTree node. class Node(object): def __init__(self, val, isL ...
- 5.Redis 发布订阅
转自:http://www.runoob.com/redis/redis-tutorial.html Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub ...
- django -- 内置分页
urls.py from django.conf.urls import url from conn_oracle import views urlpatterns = [ url(r'^page/' ...