《HarmonyOS:领航者说》技术公开课来啦,大咖分享、实战解码,不容错过 了解详情
写点什么

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

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

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

关注

评论

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

场上显眼包!海信100吋电视世界第一霸屏世俱杯

Alter

VNC Server for Mac(VNC远程控制软件)

Geek贝

MySQL事务:工作原理与实用指南

不在线第一只蜗牛

MySQL 数据库

开放、开源、协作、成长!国家超算互联网上线AI社区

科技热闻

Mac终端党必备!xHistory 一键找回手滑删掉的命令,效率翻倍

柠檬与橘子

区块链 Web3 项目的外包开发流程

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发公司

Valentina Studio Pro for Mac:Mac 平台数据库管理的全能助手

晨光熹微

如何使用第三方库中的@pura/harmony-utils(V1.3.3)申请授权工具类二

小赵学鸿蒙

三方SDK 数码相机

F5 BIG-IQ Centralized Management 下载汇总 - 集中管理 BIG-IP 设备和服务

sysin

F5

苹果造车失败?这些百亿级项目立项都应该做的正确决策!

IPD产品研发管理

产品 互联网 产品经理 产品设计

Proxyman Premium for Mac(网络调试和分析工具)

Geek贝

F5 BIG-IQ 7.1.0 - 集中管理 BIG-IP

sysin

F5

淘宝商品详情 API 与物联网技术融合的创新应用探索

Noah

Spring用到的10种设计模式,真巧妙!

电子尖叫食人鱼

spring

未来钱包:AI资产管理+跨原子交换的智能终端

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

Carbon Copy Cloner for Mac(磁盘克隆/同步/备份软件)

Geek贝

vscode [ctrl+click]‘vue 单文件组件’,‘转到定义’不起作用

柠檬与橘子

WonderPen 妙笔:Mac 上的写作利器

晨光熹微

AudFree Audio Capture for Mac:Mac 上的音频捕获专家

晨光熹微

《欢迎来到经验时代》— 强化学习之父、2024 年获图灵奖得主

GPU算力

人工智能 深度学习 强化学习 图灵奖 经验时代

多链资产管理中心:支持1000+币种的一站式钱包开发方案

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

社交金融钱包:融合聊天包与DAO治理的Web3入口

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

Yate for Mac音乐标签管理工具

晨光熹微

F5 BIG-IQ 8.4.0 - 集中管理 BIG-IP

sysin

F5

F5 BIG-IQ 6.1.0 - 集中管理 BIG-IP

sysin

F5

VS Code:轻量级高扩展编辑器,M1芯片性能全开

柠檬与橘子

KCNScrew Pack for Mac:Mac 软件序列号查询神器

晨光熹微

专业的音乐创作编辑软件PreSonus Studio One 6 Pro for mac

Geek贝

量子级安全架构:抗攻击包的冷热隔离与生物验证技术

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

Java集合--LinkedList源码可视化

电子尖叫食人鱼

Java

ViWizard Audio Capture for Mac:Mac 音频捕获的终极利器

晨光熹微

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