阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

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

关注

评论

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

LED显示屏闪烁原因及解决办法

Dylan

LED灯闪烁 LED显示屏 全彩LED显示屏

供电电源的电磁兼容设计方法?5大要点快速收藏

华秋PCB

电磁 电路 兼容 电源 供电电源

这 8 类问题,SysOM 2.0 OOM 诊断助你快速定位异常 | 龙蜥技术

OpenAnolis小助手

开源 OOM 操作系统 龙蜥技术 SysOM

GrowingIO企业级产品能力:四大需求,充分满足

Geek_2d6073

「Go工具箱」GoCSV包:一个能将结构体和csv内容互转的工具

Go学堂

Go 程序员 个人成长 csv CSV 文件导入

详解AQS的7个同步组件

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 3 月 PK 榜

Amazon Global Accelerator 的新增功能 — 互联网协议版本 6(IPv6)支持

亚马逊云科技 (Amazon Web Services)

互联网 亚马逊云科技

【值得收藏】9种让你受益终身的数据分析思维

博文视点Broadview

kubernetes 可观测性:10款开源工具

HummerCloud

Kubernetes 云原生

这篇文章汇聚33个BUG!来挑战一下,看看你能找出来几个?

why技术

java

架构实战营模块八作业

程序员小张

「架构实战营」

基于Redis、Netty、Websocket实现红包雨活动

做梦都在改BUG

知识蒸馏、轻量化模型架构、剪枝…几种深度学习模型压缩方法

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

爱了!不愧是GitHub上标星115K的Java教程,全程干货,只讲重点

做梦都在改BUG

Java

别再硬面了!这份Java面试通关手册才是你急需的

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

低代码工具选项难题浅析

赫杰辉

低代码平台

基于 Flink 流计算实现的股票交易实时资产应用

Apache Flink

大数据 flink 实时计算

LLaMA快速上手指南

Baihai IDP

人工智能 自然语言处理 AI ChatGPT 白海科技

聚焦企业数据生命周期全链路 火山引擎数智平台VeDI发布《数据智能知识图谱》

字节跳动数据平台

大数据 字节跳动 云服务 数据产品 企业号 3 月 PK 榜

早有尔闻 | 海尔智家牵头IEEE智能家居语音国际标准

Openlab_cosmoplat

工业互联网 开源社区 智慧生活

“一键飞桨”,轻松实现飞桨框架和套件的下载安装!

飞桨PaddlePaddle

框架 飞桨

对比分析数仓中行列存的特性

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

从需求管理到迭代规划,优秀的产品经理如何让工作更高效?

万事ONES

从私信到协作开发:GitHub Pull Request 的发展史

Bytebase

GitHub 协作 pull request

如何科学管理技术团队的研发交付速率?

LigaAI

DevOps 研发效能 技术管理 效能度量 企业号 3 月 PK 榜

火山引擎DataTester:一个A/B测试,将一款游戏的核心收益提升了8%

字节跳动数据平台

大数据 游戏 AB testing实战 企业号 3 月 PK 榜

5个高并发导致数仓资源类报错分析

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

ios系统修复软件:Fix My iPhone 激活版

真大的脸盆

ios Mac 系统修复 Mac 软件

巧用预测,多触点促业务可持续增长

HMS Core

HMS Core

基于 Flink CDC 的实时同步系统

Apache Flink

大数据 flink 实时计算

限时促销,火山引擎ByteHouse为企业带来一波数智升级福利!

字节跳动数据平台

数据仓库 云原生 促销 特惠 企业号 3 月 PK 榜

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