写点什么

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

  • 2010-12-12
  • 本文字数:841 字

    阅读完需:约 3 分钟

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

复制代码
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 是梦想风暴

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

2010-12-12 23:354159
用户头像

发布了 22 篇内容, 共 14.8 次阅读, 收获喜欢 49 次。

关注

评论

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

使用APICloud AVM多端组件快速实现app中的搜索功能

YonBuilder低代码开发平台

前端 APP开发 APICloud 跨端开发 跨端框架

模块七作业

novoer

「架构实战营」

来喷一下所谓无影云电脑

乌龟哥哥

无影云电脑 2月月更

第七周

cqyanbo

报名开启 | 2月25日,索信达监管合规产品线上发布会

索信达控股

面试突击23:说一下线程生命周期,以及转换过程?

王磊

艾瑞咨询:青云科技入选中国开源软件产业图谱

青云技术社区

云计算 开源 混合云

前端培训:Vue3 的自定义指令

@零度

Vue 前端开发

Mysql数据库表中有索引为什么还是查询慢?

慕枫技术笔记

数据库 2月月更

模块七课程作业

李晓笛

架构实战营

Go学习笔记——同构复合类型

为自己带盐

Go 学习笔记 2月月更

什么字体更适合程序员?

lencx

程序员 字体设置 主题

元宇宙时代NFT的价值衡量

CECBC

【C语言】 初始函数 & 数组

謓泽

数组 C语言 函数 2月月更

java培训:JVM参数配置

@零度

JVM JAVA开发

8分钟了解TDengine的WAL机制

TDengine

数据库 tdengine 开源 物联网

Tapdata 在线研讨会:如何快速上手 Tapdata Cloud?

tapdata

数据库 Cloud

模块七作业-王者荣耀商城异地多活架构设计

CH

架构实战 「架构实战营」

Linux系统编程-进程间通信(消息队列)

DS小龙哥

消息队列 2月月更

幂等最佳实践

得物技术

数据 幂等 API 一致性 请求

MongoDB University 中文字幕视频上线!

MongoDB中文社区

mongodb

Kubernetes集群监控平台(kube-prometheus-stack/Metrics Server)搭建教程

山河已无恙

Kubernetes Kubernetes 集群 2月月更

“区块链”将彻底改变人类社会文明,颠覆世界最强大的企业

CECBC

架构实战营第 4 期第 7 课作业:王者荣耀商城异地多活架构设计

owl

「架构实战营」

优酷 IPv6 演进和实践指南

阿里巴巴终端技术

ipv6 移动网络

深入解析 Flink 细粒度资源管理

Apache Flink

大数据 flink 开源 编程 实时计算

架构训练营模块七作业

沈益飞

架构是训练营 架构师训练营 4 期

如何利用友盟平台定位安卓端的程序异常 | 社区征文

liuzhen007

移动开发 新春征文 2月月更

数字货币或将消灭银行!未来3至5年,银行业可能将崩溃?

CECBC

MongoDB在vivo评论中台的应用案例

MongoDB中文社区

mongodb

数蛙DG-IoT开源平台

dgiot

物联网 2月月更 2月日更 dgiot dgiot物联网

代码之丑(八)——不一致的困惑_Java_郑晔_InfoQ精选文章