写点什么

代码之丑(十三)–封装代替嵌套容器

  • 2012-06-26
  • 本文字数:905 字

    阅读完需:约 3 分钟

第一次见到这样的代码时,我的第一感觉是,它真复杂:

复制代码
List<Map<String, String>> configurations;

可只要理性稍一回归,便不难察觉,它少东西了。少什么了呢?

看看这段代码如何使用,下面是一个缩略的版本:

复制代码
for (Map<String, String> configuration : configurations) {
for (Map.Entry<String, String> entry : configuration.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}

说白了很简单,其实就是要拿到存在 Map 里的键值对。在面向对象的程序语言中,有一种神奇的构造,叫做类,而它有一个很重要的特点叫做封装。是的,这段代码少了类,少了封装。闲言少叙,封装起来:

复制代码
public class ConfigurationItem {
private String name;
private String value;
...
}

于是,那个容器嵌套容器的声明变成了

复制代码
List<ConfigurationItem> configurations;

有了类,有了封装,我们就可以再进一步进行封装,比如前面那段代码里的

复制代码
entry.getKey() + " " + entry.getValue()

实际上,可能只是为了得到这一项的字符串表示而已,那就不如直接提供一个方法:

复制代码
public class ConfigurationItem {
...
@Override
public String toString() {
return name + " " + value;
}
}

于是,前面那个双重 for 循环就变化了:

复制代码
for (ConfigurationItem item : configurationItems) {
System.out.println(item);
}

单以丑陋而言,这段代码还算不上此类的极致,三五层嵌套也是有的,如果某些貌似负责的程序员再给每层取值都加上非空判定,那场面可是相当壮观的。

当容器开始嵌套容器,请考虑封装。

作者简介

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

查看原文:代码之丑(十三)


感谢张凯峰对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-06-26 00:004147
用户头像

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

关注

评论

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

不想被淘汰?老板必须弄懂的四个热词:零代码、低代码、AI+低代码、AI开发平台

红迅AI低代码老陈

低代码 低代码平台 红迅软件 红讯AI开发平台

【报名启动】ITCP 联盟第五届技术大会—AI 应用专场

Qunar技术沙龙

AI 互联网 线下沙龙 技术大会

揭秘!AI开发平台和低代码正在重塑软件开发行业?

红迅AI低代码老陈

低代码平台 红迅软件 红讯AI开发平台

#HarmonyOS NEXT体验官# 图片选择方案

最新动态

【HarmonyOS NEXT】【自定义组件】下拉选择框

最新动态

新客户 | 昆仑数智携手时序数据库 TDengine,让中石油运营中心“一眼可知”

TDengine

tdengine 时序数据库

AI 大模型智能问答系统:让 “问有所答” 更懂你

上海拔俗

AI Agent 设计原则与最佳实践

方品

一行代码,让Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略

阿里云大数据AI技术

elasticsearch 阿里云

随着AI发展,AI开发平台和低代码正在重塑软件开发行业

红迅AI低代码老陈

低代码平台 红迅软件 低代码平台+AI

#HarmonyOS NEXT体验官# 应用文件访问

最新动态

【HarmonyOS NEXT】地图使用详解(三)标点定位问题

最新动态

AI 教学服务系统:用技术破解 “千人一课” 难题

上海拔俗

【HarmonyOS NEXT】Calendar Kit日历管理

最新动态

HarmonyOS 6 云开发-用户头像上传云存储

最新动态

CAD双击DWG图纸为什么是打印

极客天地

【HarmonyOS NEXT】定位相关知识(Locationkit)

最新动态

#HarmonyOS NEXT体验官# HMRouter使用详解(一)环境配置

最新动态

【HarmonyOS NEXT】地图使用详解(一)

最新动态

ETL中配置的增量同步不生效?最常见的5个坑

谷云科技RestCloud

数据库 数据处理 ETL 数据集成 增量同步

#HarmonyOS NEXT体验官# 应用权限原理和封装

最新动态

CAD怎样修改块属性

极客天地

LED海报屏幕:产品、优势、应用场景

Dylan

LED LED display LED显示屏 LED屏幕

AI学生社区智能化服务系统:让学习互助“精准又高效”

上海拔俗

#HarmonyOS NEXT体验官# 云开发-用户自动认证

最新动态

【HarmonyOS NEXT】地图使用详解(二)

最新动态

AI 病史采集系统:让看病 “第一步” 更省心

上海拔俗

#HarmonyOS NEXT体验官# 关系型数据库封装DBHelper

最新动态

CAD设置极轴追踪的方法

极客天地

CAD内如何开启WORD及EXCEL

极客天地

一文弄懂MES、ERP、WMS是什么,及其关系详解

优秀

wms ERP mes

代码之丑(十三)–封装代替嵌套容器_语言 & 开发_郑晔_InfoQ精选文章