BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

用敏捷方法做软件重用

| 作者 Chris Sims 关注 0 他的粉丝 ,译者 李剑 关注 1 他的粉丝 发布于 2009年4月15日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

最近在极限编程Yahoo讨论组上,有些用户讨论了软件重用与XP实践——只在必要的时候才写代码——二者的明显冲突。Ron Jeffries和其他人一起探讨了代码重用的成本与收益,以及在敏捷环境中何时重用,如何重用。

Brandon Olivares发起了讨论。他说,他刚刚在某些代码上用了30小时的时间,然后觉得这些代码可能会被重用,于是就觉得很矛盾,不知道是不是该把这些代码抽象出来,这样其他项目就有可能也用得到。

按照我个人理解来看,XP不鼓励假想某些东西可能会被用到,除非确实到了要用那个东西的时间点上。还是我的个人理解,刚才所说的东西也包括提取代码以供日后重用,XP提倡的是到了出现重复的时候再去做重构。

软件重用长期以来一直被极力宣扬为可以大量节省时间,也许另一个项目中的人可以重用你的代码,而不用重新开发。Brandon想知道其他人都是怎么决定在什么时候抽象代码加以泛化的。

Ron Jeffries第一个回复,他讲了为什么跨团队重用的做法比初看起来要困难且昂贵得多:

我必须得给它打包,要是就我自己用的话这活就不用干了;我得给它写文档;我得让它更加抗造,把周边的一些问题去掉;我得给它提供支持,回答很多问题;我得训练别人用它。

如果我做了这些事情,代价就很高;如果我不做,别人用我的东西就很困难,给他们带不来多少帮助。

因为这些原因,Ron采取的是这种做法:

我只做适当的抽象,够自己用就好。如果我以后在一个稍微不同的环境下还需要用的话,我就会改进抽象。不过除非我的项目目标是给其他项目构建成品,我就不会浪费时间和金钱去给其他项目做东西。

还有一位认为,如果所有的项目都共享一套通用构建系统和测试套件,那重用就会容易一些。在这样的环境中,如果某个团队打算重用某些可以泛化的代码,这个构建系统就可以保证他们不会给其他需要这些代码的团队造成障碍。

George DinwiddieRalph E. Johnson等人推荐到第二次(乃至更晚)用到同样代码的时候再做泛化。Adam Sroka把这个叫做“演化重用”,他认为这种方法比“为重用而设计”效率更高。一名叫做Tim的人发帖说,他这样给业务人员解释:“第一次,你是给编码买单;第二次,你是给重用买单;第三次,它就是免费的了。”

George指出,更困难的地方在于怎么让其他团队意识到有些代码可以重用。帮助大家发现良机的沟通成本可能会很高。Jeff Langr说,让开发人员跨团队结对,可以解决这个问题。

Scott Ambler也加入了交流,他提到,开源也是重用的一种形式,它已经取得了巨大成功。他同时也提到,代码库、开发工具包乃至mash-up这些都是软件重用的成功案例。

你怎么判断重用代码的时机?请留下你的宝贵意见。

查看英文原文An Agile Approach to Code Reuse

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

我也为这个问题所困扰 by Yu Peter

我也为这个问题所困扰。经常写一段代码,然后觉得这段代码或许以后会复用到,于是开始复杂的对其进行构造和完善。花费的精力和成本往往很大。现在越来越怀疑这种“日后的复用”,究竟是种方便还是种麻烦。或许是该像大家讨论的那样,“真正用到的时候再做”。

重用的粒度 by qi lin

粒度越粗,越不易被重用,尽量提供细粒度可重用的代码

这个问题确实很困扰 by lee mEng

粒度的粗细确实很难把握,主要还是靠经验,自己的习惯及业务的需要了,尽量写粒度适中的代码,最不济以后自己也能用。

一部分根源其实在于现在的程序设计语言及IDE本身 by zhang 3

1 太多的隐含知识只能通过文档表达,而不能显式代码化,这导致复用困难。
2 缺乏从粗粒度的代码结构中自动抽取细粒度可复用代码的手段。

这个提得好. by qiu james

“第一次,你是给编码买单;第二次,你是给重用买单;第三次,它就是免费的了。”

不过有时候, 还是忍不住第一次就为编码和重用都买好单; 即使以后没有机会重用, 也权当娱乐了.

团队配合很重要 by 林 杭

我也觉得在第一次时需要一定的抽象,当需要时在进行深度抽象提供复用
另外团队成员的经验也很重要,有经验的人修改代码时能够意识到可复用,但是缺少经验的人可能就不会咯

真正用到的时候再做重构 by Wong Peter

真正用到的时候再做重构,Ron采取的方式非常好。问题在于George指出的,怎么让其他团队意识到有些代码可以重用。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

7 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT