写点什么

用敏捷方法做软件重用

2009 年 4 月 14 日

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

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

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

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

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

我必须得给它打包,要是就我自己用的话这活就不用干了;我得给它写文档;我得让它更加抗造,把周边的一些问题去掉;我得给它提供支持,回答很多问题;我得训练别人用它。 如果我做了这些事情,代价就很高;如果我不做,别人用我的东西就很困难,给他们带不来多少帮助。

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

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

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

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

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

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

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

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

2009 年 4 月 14 日 01:241087
用户头像

发布了 197 篇内容, 共 44.8 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

请用思维导图画出架构师训练营所有技术知识点

Jacky.Chen

在onelogin中使用OpenId Connect Authentication Flow

程序那些事

权限系统 OAuth 2.0 程序那些事 权限架构 OpenConnect

滴普技术荟-云原生基座OpenKube开放容器实践(二):理解linux虚拟网络设备veth

滴普科技2048实验室

Linux

小品阅读所带来乐趣

叶小鍵

区块链数据存储与IPFS技术的融合应用

CECBC区块链专委会

区块链 数据存储

LeetCode题解:347. 前 K 个高频元素,快速排序,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

腾讯云加速构建云原生数据仓库,助力企业数字化转型

小小的一朵云

大数据 数据仓库

Java达到什么样的水平才能通过阿里社招?

Java架构师迁哥

滴普技术荟-云原生基座OpenKube开放容器实践(一):如何理解Linux network namespace ?

滴普科技2048实验室

Linux

AI面临产业大考:落地虽难,但产业化路径已日渐清晰

脑极体

2021年区块链十大发展趋势:那些偶然中的必然

CECBC区块链专委会

货币

Windows Server 做网络转发

wong

Windows Server netsh

城市智慧社区智能化建设,平安小区管理系统

135深圳3055源中瑞8032

PlayStation@4功能介绍及测试应用

行者AI

测试

APICloud AVM 多端开发 | 外卖app开发案例教程(下)

APICloud

前端工程 Web Worker 前端进阶 前端教程 APICloud

功能测试用例设计方法分享

行者AI

测试

一文彻底吃透MyBatis源码!!

冰河

架构 mybatis 架构设计 框架 源码解析

腾讯云大数据发布数据生态战略,构建开源开放数仓生态

小小的一朵云

大数据 数据仓库

亿级流量峰值没在怕,“缓存”技术来减压!

博文视点Broadview

入职阿里!全靠刷明白了这份Java面试合集(分布式+Dubbo+线程+Redis+数据库+JVM+并发)

Java架构之路

Java 程序员 架构 面试 编程语言

同事临走时,给了我这份多线程and高并发(面试题+思维导图),借此我含泪拿下了阿里offer

Java架构之路

Java 程序员 架构 面试 编程语言

区块链脱虚向实 市场教育基本完成

CECBC区块链专委会

区块链

架构师训练营技术知识点

业哥

三年JAVA开发经验,字节四面成功拿下2-2Offer,入职就是30K16薪

Java架构之路

Java 程序员 架构 面试 编程语言

架构师训练营11W作业

Geek_f06ede

元旦在家撸了两天Seata源码,你们是咋度过的呢?

冰河

分布式事务 分布式数据库 分布式存储 数据一致性 seata

谷歌被反垄断诉讼后,美国互联网会再度繁荣吗?

脑极体

华为交换机恢复出厂设置的三种方法

区块链食品溯源系统搭建---赋能智慧农业

135深圳3055源中瑞8032

2020年度国产数据库:openGauss

墨天轮

数据库

Apache Pulsar 12月月报:Pulsar 2.7.0 发布!

Apache Pulsar

大数据 开源 pulsar Apache Pulsar 消息系统

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

用敏捷方法做软件重用-InfoQ