写点什么

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

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

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

关注

评论

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

交换机是什么?云管理平台可以管理交换吗?

行云管家

云计算 云服务 交换机 云管理

火山引擎VeDI核心产品DataTester再进化,A/B大模型应用评测功能上线

字节跳动数据平台

大数据 A/B 测试 对比实验 数字化增长

mcgs笔记 构件 查看帮助文档

万里无云万里天

自动化 HMI mcgs

TDengine 签约前晨汽车,解锁智能出行的无限潜力

TDengine

数据库 tdengine 时序数据库

远航汽车远勤山:品质技术服务放首位 扎根新能源汽车赛道持续远航

Geek_2d6073

防止电脑休眠软件Lungo for Mac

Mac相关知识分享

天猫商品详情数据接口:利用接口工具获取数据

tbapi

天猫API接口 天猫商品详情接口

pdf转换及ocr识别软件PDFify for mac

Mac相关知识分享

非凸科技钻石赞助第四届Rust China Conf 2024

非凸科技

mcgs笔记 新建工程与模拟运行

万里无云万里天

自动化 HMI mcgs

NPU 与 GPU 相比,有什么差别?| 技术速览

Baihai IDP

程序员 AI gpu 企业 9 月 PK 榜 NPU

襄阳等保测评机构有哪些?在哪里?

行云管家

等保 等保测评

网站下载工具SiteSucker Pro for Mac

Mac相关知识分享

超级驾趣学院 长安马自达MAZDA EZ-6驾驭全场景出行

Geek_2d6073

《黑神话:悟空》真的带火云电脑了吗?

脑极体

AI

【黄金圆环】在研发领域的实践分享

京东科技开发者

NocoBase 与 NocoDB:开源无代码工具深度对比

NocoBase

开源 低代码 无代码开发 低代码开发 无代码

mcgs笔记 设备窗口 添加父设备与子设备

万里无云万里天

自动化 HMI mcgs

LeetCode:240. 搜索二维矩阵 II,直接查找,详细注释

Lee Chen

阿里云 EMR StarRocks 在七猫的应用和实践

阿里云大数据AI技术

云计算 大数据 阿里云 EMR

Comparison of QCN9274 and QCN6274 as Wi-Fi 7 Network Card Chips

wifi6-yiyi

WiFi7

🌍 "独立开发者出海技术栈和工具" 现已上线!

沉浸式趣谈

独立开发者 工具 技术栈 出海 工具站

Percona Toolkit 神器全攻略(性能类)

GreatSQL

音频录制软件Audio Hijack for Mac

Mac相关知识分享

音频录制软件

How Can Unity+腾讯云开发=微信小游戏?

蛋先生DX

腾讯云 Unity 数据模型 云开发 微信小游戏

软件测试 | 手工转测试开发轻松实现薪资 50%涨幅的逆袭之路

测试人

软件测试

2024 医疗 Datathon 又叕来啦~!“理-工-医-信”跨学科联合科研,以数据驱动医疗实践

ModelWhale

R 语言 datathon 医疗大数据

mcgs笔记 设备窗口 查看子设备的参数配置说明

万里无云万里天

自动化 HMI mcgs

动物目标检测——基于YOLOv5和树莓派4B平台

芯动大师

人工智能 机器学习 AIGC

强化安全防线:融合反射API与代码注入防护的先进策略

代码忍者

API 测试 pinduoduo API

三国策略游戏下载:三国志11威力加强版 (Win&Mac)版下载

你的猪会飞吗

三国志11威力加强版 Mac游戏下载 mac破解软件下载

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