带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)

简介: 带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)

带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)https://developer.aliyun.com/article/1339966?groupCode=taobaotech


使用mapWithResource

 

1 Source.from(
2 Arrays.asList(
3 "SELECT * FROM shop ORDER BY article-0000 order by gmtModified desc limit 100;",
4 "SELECT * FROM shop ORDER BY article-0001 order by gmtModified desc limit 100;"))
5 .mapWithResource(
6 () -> dbDriver.create(url, userName, password),
7 (connection, query) -> db.doQuery(connection, query).toList(),
8 connection -> {
9 connection.close();
10  return Optional.empty();
11 })
12  .mapConcat(elems -> elems)
13  .runForeach(System.out::println, system);


假设我们有一组 SQL 需要进行处理,我们需要从数据库中的多个表中查询对应的结果,并将最终结果进行合并和输出到控制台。在mapWithResource 的帮助下,我们可以极大的简化我们的代码:

 

 

在上面的例子中:我们有一组预先定义好的 SQL,分别从多个表中读取最新的 100 条数据,通过使用mapWi- thResource ,我们优雅地为每个流创建了 db 相关的连接,并进行对应的查询操作,并合并查询结果,在流处理完成后,关闭对应的资源。上面的代码通过复用我们前面编写的 mapWithResource 将复杂资源和生命周期管理进行了简化,作为对比,大家可以思考一下如果我们不使用已有抽象所需要付出的努力。

 

 

总结

 

在上面的例子中,我们通过 statefulMap以及和其他的操作符相互组合,实现了很多和状态、生命周期相关的操作符,而代码量则大大减少。基于一个经过考验的操作符来编写自定义操作符,也能进一步降低出错的概率,以及代码审查的难度。而相关的操作符都是通过一个底层的 statefulMap  来实现。映射到我们的工作中则是尽可能地抽象、提炼,对系统的核心模型、核心功能进行打磨,从而每个应用都有一个精巧的内核,并和其他的应用构成丰富的生态。而非上来就 复制、粘贴,重复造轮子;避免最终陷入复制、粘贴的泥潭中。虽然有时我们可能没有足够的时间来进一步抽象,而是业务先行。但是我依然建议,在后续的实践中,进行不断回顾和提炼,在保障系统稳定可靠、在有测试手段保障的情况下,进行逐步的重构,使得系统更加容易理解、维护和稳固。

 

笔者相信:磨刀不误砍柴工,在设计、方案review、测试和不断重构、精炼的过程中所花费的时间,一定会在将来多倍的回报。

 

团队介绍

 

大淘宝技术移动技术中台,推进淘宝、天猫等架构升级,致力于为淘系、整个集团提供基础核心能力、产品与解决方案:

  1. 业务高可用的解决方案与核心能力(应用高可用:为业务提供自适应限流、隔离与熔断的柔性高可用解决方案, 站点高可用:故障自愈、多机房与异地容灾与快速切流恢复);
  2. 新一代的业务研发模式FaaS(一站式函数研发Gaia平台);
  3. 下一代网络协议QUIC实现与落地;
  4. 移动中间件(API网关MTop、域名调度AMDC、消息/发布订阅/推送、文件上传AUS、移动配置推送Orange 等等)。
相关文章
|
存储 UED 算法
|
设计模式 算法 架构师
软考软件设计师:是否值得报考?详尽分析与建议
软考软件设计师是我国IT领域权威认证之一,涵盖软件设计、系统分析、架构设计等多方面知识。
818 1
|
SQL 分布式计算 DataWorks
DataWorks智能交互式数据开发与分析之旅
本次实验将带您进行DataWorks Notebook的快速入门,包含:Notebook新建、多引擎SQL开发与分析、Python开发、交互式分析等,同时,使用DataWorks Copilot体验智能数据开发,体验智能交互式数据探索之旅。
3154 11
|
Rust 安全 Java
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第27天】Rust语言以其独特的特性和优势在编程领域迅速崛起。本文介绍Rust的核心特性,如所有权系统和强大的并发处理能力,以及其性能和安全性优势。通过实战示例,如“Hello, World!”和线程编程,帮助读者快速入门Rust。
1537 1
|
机器学习/深度学习 自然语言处理 算法
进阶RAG:探索前沿应用与挑战
【10月更文挑战第21天】
569 0
|
存储 弹性计算 固态存储
阿里云服务器租用价格参考,云服务器收费标准与实时活动价格整理
阿里云服务器租用价格参考,本文更新了阿里云服务器最新的租赁费用,包括云服务器实时的活动价格与云服务器收费标准。经济型e实例云服务器4核16G10M带宽配置30.00元/1个月、90.00元/3个月,独享型通用算力型u1实例2核4G服务器仅需199元1年,轻量云服务器2核2G新用户专享价格61元/1年,计算型c7a实例2核4G配置特惠价625.68元/1年。更多阿里云服务器热门配置活动价格及云服务器租赁费用及活动价格见下文。
阿里云服务器租用价格参考,云服务器收费标准与实时活动价格整理
|
机器学习/深度学习 弹性计算 人工智能
什么是阿里云GPU云服务器?GPU云服务器产品优势及应用场景介绍
GPU云服务器是阿里云的云服务器ECS产品之一,是提供 GPU 算力的弹性计算服务,具有超强的计算能力,服务于深度学习、科学计算、图形可视化、视频处理多种应用场景。本文为大家介绍阿里云GPU云服务器产品优势、应用场景以及阿里云GPU云服务器实例规格有哪些。
什么是阿里云GPU云服务器?GPU云服务器产品优势及应用场景介绍
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
373 0
|
存储 JavaScript 前端开发
在?聊聊浏览器事件循环机制
在?聊聊浏览器事件循环机制
226 0
|
前端开发 Ubuntu 开发者
【Docker系列】Docker-核心概念/常用命令与项目部署实践
【4月更文挑战第1天】 Docker是容器化技术,打包应用及依赖,实现快速部署。核心概念包括镜像、容器和仓库。镜像是只读模板,容器是镜像运行实例,仓库用于存储和分发镜像。常用命令如`docker search`、`docker pull`、`docker images`、`docker ps`等。安装Docker在Ubuntu上涉及`apt-get update`、`install docker-ce`等步骤。了解这些基础,开发者能更高效地部署和管理应用。Docker简化了环境配置,增强了软件的可移植性和扩展性,是现代开发的必备技能。
902 3