BT

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

代码之丑(八)——不一致的困惑

| 作者 郑晔 关注 2 他的粉丝 发布于 2010年12月14日. 估计阅读时间: 2 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

下面是一段代码,出现在一个函数里面:

XString groupid;
getGroupidByTel(tel, groupid);
YString sql;
sql.SetData("select subsid from subscriber b");

如果你没有注意到问题,我稍微提醒一下,这里用到了两个字符串类型。

这确实是一段真实的代码,于是,我找到了项目组中的人,询问两个字符串的来历。终于,一个颇有资历的人给了我一个答案。

项目之初,有人编写了XString,用了一段时间之后,在某些特定的场景下,XString会出问题,于是,又有英雄出现,编写了YString。从此,XString和YString并立于江湖。

其实,我想搞清楚的只是一个问题,什么时候该用哪个类。

可是,我把这个问题抛给了不只一个人,却没有人能给我一个确定性的答案。好吧!当时,编写YString的动机是XString出了问题,那问题是什么呢?我看到的依旧是困惑的面孔。

XString和YString让我不安,原因在于,它们的并存破坏了概念一致性。一旦要写一段用到字符串的代码,我会纠结于到底该用XString还是YString。有时候,没有选择是幸福的。对于大规模团队而言,尤其如此。

最简单的做法自然是,选择其一,一统江湖。方法很简单,做一次全局替换就好了。

不过,理性告诉我,这是冲动的做法,特别是没有人对两个字符串有足够清晰认识的情况下。在一个叫现实的东西面前,我不得不低下头,改动遗留代码风险极大,况且没有足够的测试支撑我们。

但我们至少可以在编写的新代码中做出统一的要求,选择一条路走下去,而不是放任所有开发人员根据自己的脾气秉性、喜怒哀乐,甚至天气,随机的做出选择。

好吧!我可以再退一步,如果在全系统统一确实是一件困难的事情,但至少,至少在一个函数内别再混用不同的字符串了。

作者简介:

郑晔,ThoughtWorks公司咨询师,拥有多年企业级软件开发经验,热衷于探索各种程序设计语言在真实软件开发中所能发挥的威力,致力于探寻合理的软件开发方式,加入ThoughtWorks公司后,投入到敏捷开发方法的实践之中,为其他公司提供敏捷开发方法方面的咨询服务。他的blog是梦想风暴

查看原文:代码之丑(八)

评价本文

专业度
风格

您好,朋友!

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

获得来自InfoQ的更多体验。

告诉我们您的想法

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

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

部分不太懂 by Zheng Bryant

XString、YString是个啥米?
当然文章的大意是清楚的,也很赞成。
程序员最容易犯的、也是最坏的毛病,就是不思考好的习惯、好的做法,凭喜好写代码,然后还振振有词:只要运行正确就好。

这个问题可以从项目管理方面避免 by G. Conan

1.完善项目模板/示例文档
2.完善项目编码规范文档

Re: 这个问题可以从项目管理方面避免 by Lee Joe

这种方法太官僚了,大部分开发者不会来管你文档里规定了要怎么做,除非和工资挂钩。

从测试的角度看 by Zhang Kooyee

从测试的角度看,如何做到全面而又高效的测试呢,而且是在有限的成本和进度下? 现实和理想总是很矛盾的。

强烈赞成 by zhang xiaofei

还有更极端的情况,好几个开发者就同一个问题实现了非常相似的数个类。。。

这是一个非常不负责任的设计~ by wu frank

作为开发人员,如果你设计的类是给别人使用的,那么你就应该清晰的说明所有方法的通途,实现方案,并发安全性等特性,否则,就尽你所能的把你写的public去掉吧~

Re: 这是一个非常不负责任的设计~ by Lin Bruce

这个要顶

代码少不代表代码优美 by Wong Peter

优美的代码应该是统一的(概念一致性);应该是容易(快速)理解的。

允许的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通知我

8 讨论

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT