写点什么

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

  • 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:354169
用户头像

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

关注

评论

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

聚焦行业,赋能客户 | 博云容器云产品族五大行业解决方案发布

BoCloud博云

云原生 容器云

DevEco Studio的这些预览能力你都知道吗?

OpenHarmony开发者

Open Harmony

程序猿必备的数电知识,快来看看你掌握多少!(建议收藏)

孤寒者

进制转换 数电 常见进制

投稿开奖丨轻量应用服务器征文活动(4月)奖励公布

阿里云弹性计算

Hexo 防火墙 SSL证书 CDN加速 安全组

如何使用Superset可无缝对接MRS进行自助分析

华为云开发者联盟

大数据 数据分析 后端 Superset

百分点大数据技术团队:可插拔OSS架构设计和实战经验

百分点科技技术团队

InfoQ 极客传媒 15 周年庆征文|国产自研数据库GaussDB(DWS)架构详解【高斯数据库】

恒山其若陋兮

架构 InfoQ极客传媒15周年庆 GaussDB架构

一年一度 OceanBase 技术征文大赛全面开启! 入门实战,等您来写

OceanBase 数据库

数据库

设计师必备的设计导航网站

小炮

模块三

Geek_2ce415

HarmonyOS Connect FAQ 第三期

HarmonyOS开发者

HarmonyOS

关于并发和并行,Go和Erlang之父都弄错了?

OneFlow

并发 并行

什么是算子下盘

华为云开发者联盟

数据库 集群 算子

【前端之路】react框架学习

恒山其若陋兮

React 6月月更

Java——类和接口

武师叔

Java 线程 6月月更

设计消息队列存储消息数据的 MySQL 表格

哈喽

「架构实战营」

【直播回顾】战码先锋第四期:轻松入门,成为媒体子系统贡献者

OpenHarmony开发者

Open Harmony

软件、硬件、生态齐发力,英特尔夯实云计算基石

科技之家

大量模块壳工程本地如何快速编译?优酷 iOS 工程插件化实践

阿里巴巴终端技术

ios App 编译 架构设计

Karmada v1.2发布:开启全文本搜索新纪元

华为云开发者联盟

云计算 调度器 Karmada 全文本搜索 资源解释器

玩转云原生流量管理——Flomesh

Flomesh

云原生 流量控制 Service Mesh 服务网格 Pipy #开源

TiDB 6.0 实战分享丨冷热存储分离解决方案

PingCAP

TiDB

一款实用的综合性导航网站

小炮

一文搞懂│http 和 https 的通信过程及区别

https 安全 HTTP 通信 6月月更

玩转云原生流量管理——Flomesh

Flomesh

云原生 流量控制 #开源

【Spring 学习笔记(七)】Spring 管理第三方Bean之管理Druid数据源

倔强的牛角

Java spring Java EE 6月月更

你好复工人,马斯克又因“工作狂”上热搜,远程办公究竟是好是坏?

BeeWorks

基于任务调度的企业级分布式批处理方案

阿里巴巴云原生

阿里云 分布式 云原生 SchedulerX

flutter系列之:移动端的手势基础GestureDetector

程序那些事

flutter 程序那些事 6月月更

DevEco Studio强大的预览功能让开发效率大大提升!

HarmonyOS开发者

HarmonyOS

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