免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2925 | 回复: 6
打印 上一主题 下一主题

【转载】Keeping Software Soft (Martin Fowler) [复制链接]

论坛徽章:
0
1 [报告]
发表于 2003-06-25 16:47 |只看该作者

【转载】Keeping Software Soft (Martin Fowler)

看了
认真想想先

首先觉得好的设计比简单设计更花时间
所以想写好代码和写快的代码是两回事

其次再补充

论坛徽章:
0
2 [报告]
发表于 2003-06-25 16:52 |只看该作者

【转载】Keeping Software Soft (Martin Fowler)

本文提倡XP方法
这是解决中小软件开发中由于需求过份变化后引走代码的混乱的一个好方法

就是所做的系统只要能满足当前需求就可以了
简单就是最好是XP设计的精髓

如果需求改变,并且需要重构的话
就进行重构,  而不是修补原有的系统

这样新系统可以保持简洁的特色

但是重构本身需要时间与精力,这点是使用XP时需要考虑的
如果软件比较大的话那么重构是不可能的

继续想

论坛徽章:
0
3 [报告]
发表于 2003-06-25 17:14 |只看该作者

【转载】Keeping Software Soft (Martin Fowler)

原帖由 "无双" 发表:
但是重构本身需要时间与精力,这点是使用XP时需要考虑的
如果软件比较大的话那么重构是不可能的
   

本文提出简单为主是基于:
1。需求是变化的,人无法改变这个现实
2。人的认识得有个过程,对系统的认识是在开发系统的过程中不断完善的
   不可能一开始就有很好的设计。
3。修改软件的设计并不是很难的事情,重构在这个过程起到很大的作用。

最后一个观点,需要几个先决条件:
1。系统有完备的测试,以保证重构前后系统功能不变(Martin 曾在他的论文里提过曾经为一个大系统写了 2000 个的 unit test)
2。良好的设计(宜于修改的设计),如果设计太差,再好的重构技术也白搭
3。需要开发人员有很好的 重构的知识,就是何时,如何,怎么重构

有了这几个, xper 才有信心大声的说:“简单为主”     


大的系统不适合重构,这句话不怎么对
系统不是一天构建成的,重构也不是最后在做的,重构贯穿与软件开发的全过程
一般来说,重构的时机在:当你要往软件里新增一个功能,却发现现在的软件框
架不适合,就要先进行重构,然后在继续往系统加新功能。

重构的目的在于使系统更容易理解,更不怕将来的变化。

论坛徽章:
0
4 [报告]
发表于 2003-06-25 18:05 |只看该作者

【转载】Keeping Software Soft (Martin Fowler)

因为面向对象的语言中都提供了封装等机制
所以重构时可以重用以前的类

如果需求变化很大
以致整个系统都要重写时
那么事实是是开始一个新项目了

所以重构只是重组织以前的对象
让他们更合理
或是对一小部分编写得不合理的对象重写
而不应该是全盘推倒重来

大系统中对象的关联很多
重构时必须考虑其它对象的影响
所以我认为重构并不适合大系统
你可以进行局部的修改,或是模块内的修改
但是对整个系统的全局修改那要问问经理是不是同意了

另外重构需要花时间与人员
所以只是不得已时而为之

每个项目都有自己的预算与经费
经常重构, 系统的开发成本会更高
因此开始时应该尽量掌握客户需求而不是想等到后面客户提出需求时再重构

论坛徽章:
0
5 [报告]
发表于 2003-06-26 09:25 |只看该作者

【转载】Keeping Software Soft (Martin Fowler)

>;如果需求变化很大
>;以致整个系统都要重写时
>;那么事实是是开始一个新项目了
Refactoring 也不是万能的,这种情况得比较一下 Refactoring 和重写的成本
如果 Refactoring 的成本更高,就重写吧。



>;所以重构只是重组织以前的对象
>;让他们更合理
>;或是对一小部分编写得不合理的对象重写
>;而不应该是全盘推倒重来
说得对,每次的重构只是对系统的一部分进行的。


>;大系统中对象的关联很多
>;重构时必须考虑其它对象的影响
>;所以我认为重构并不适合大系统
>;你可以进行局部的修改,或是模块内的修改
>;但是对整个系统的全局修改那要问问经理是不是同意了
良好的设计应该做到:如果增加一个新的功能,系统需要改动的地方应该最少
这可以由两个方法做到:
  早期的设计考虑到了将来的变化
  早起的设计没有考虑到这个变化,但可以用重构使系统的结构适合这点


>;另外重构需要花时间与人员
>;所以只是不得已时而为之
不同意。
重构的结果是:程序更容易理解,更容易面对变化,每次加入新的功能都只需要改动很少数的地方,
这样可以减少理解系统,增加新功能的时间,使项目能以恒定的速度加入新的功能

而不是象以前的项目,开发越来越慢,最后加入一个新功能会导致系统的太多地方的改变而不得不
减慢开发速度,甚至完全重新系统

>;每个项目都有自己的预算与经费
>;经常重构, 系统的开发成本会更高
>;因此开始时应该尽量掌握客户需求而不是想等到后面客户提出需求时再重构
不同意。
重构不会引起开发成本的提高,反而会降低开发成本

正如文章里所说的,正是由于以往的开发(up-front design)害怕将来的需求改变
所以才出现你说的这种情况:
“希望开始时应该尽量掌握客户需求而不是想等到后面客户提出需求时再重构”

但是,开发人员和客户都是在系统开发的过程中对系统有不断深入的认识的
所以不可能指望一开始就掌握完整的需求,必须承认这点:需求永远使变化的。

究其根本,文中说道,是一个“want 和 cost 的问题”,是因为后期的需求改变
所带来的成本的增加太多了,你的推断是基于这个前提。

但是由于有了 Refactoring,有了完备的测试,有了良好的设计,使 want 和 cost
的关系发生了很大的变化,后期需求的改变并不会引起太多的成本增加。

这就是 xp 里所说的勇气:有了测试,refactoring,频繁的发布,我们需要做的只是
努力做好今天的事情,我们并不害怕将来的需求的变化。

Martin Fowler 为 Refactoring 专门写了一本书:
Refactoring: Improving the Design of Existing Code

在中国刚出影印版:
http://www.china-pub.com/computers/common/info.asp?id=12301

可以去看看。
:)

论坛徽章:
0
6 [报告]
发表于 2003-06-26 10:03 |只看该作者

【转载】Keeping Software Soft (Martin Fowler)

如果开始需求明确
那么设计就会比较完善

这样写时不需要多少重构

重构是一种方法
但不是说什么都可以通过重构来解决
夸大重构的作用

因为 重构后要对系统徕进行编码 测试  修改关联部分
成本很高

所以开始的需求分析与设计是很重要的
而不是说等到后面再通过重构解决问题

所以就是要知道
重构是一种解决问题的方法 可以让系统代码更简洁 可扩展性更好
而不是什么都要通过重构来解决

论坛徽章:
0
7 [报告]
发表于 2003-06-26 10:10 |只看该作者

【转载】Keeping Software Soft (Martin Fowler)

说的对,呵呵。

对于已经很明确的需求,当然一开始就要用良好的设计开始

只是对于将来无法预测的需求的改变,可以使用重构的方法来解决

:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP