写计算机代码的简单软件,@程序员,四步教你写出简单易懂的代码!

2024-03-04 10:30

本文主要是介绍写计算机代码的简单软件,@程序员,四步教你写出简单易懂的代码!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

日常工作过程中,为了提升处理事情的效率,我们喜欢化繁为简。那如何培养出良好的思维模式快速“套出”代码呢?今天,我们将用OOP模式作为作为范例,为大家提供借鉴的思维模板。

39449cc9fe12b6019638fa3efe935950.png

作者 | Dan Goslen

译者 | 弯月,责编 | maozz

以下为译文:

说起编程,我的目标是编写简单易懂的代码。也就是 Bob Martin所说的干净的代码。也有人称之为可读或可维护的代码。其实,这众多说法指的都是同一件事。

但做到这一点绝非易事!

编写简单易懂的代码需要周全的考虑。需要通过不断的重构,写出正确的代码。通常还需要同事的审核或结对编程。

但是,我通过多年的职业生涯总结出了一些模式,这些模式可以帮助我编写简单易懂的代码。虽然这些模式不一定会加快写代码的速度,也不一定会降低写代码的难度,但是可以帮助我写出更简单的代码。

每当面临新的问题时,我都会采用这些模式,将问题化繁为简。

关于模式

简单地介绍一下,我所说的模式指的是你可能有所耳闻的OOP模式。我知道从很多方面来说OOP已经过时了,但无论你喜欢哪种范式,这些模式仍然很实用。在这些模式中,简单的组合重于继承——继承恰恰是大多数人讨厌OOP的原因。

本文中提到的大多数模式都源自“四人帮”的著作《设计模式》我将在本文中简要介绍每种模式,有关详细内容我强烈推荐你阅读这本书。

“四人帮”Gang of Four,指Erich Gamma、Richard Helm、Ralph Johnson以及John Vlissides四人。

抽象工厂

工厂(Factory )本质上是一个对象,其唯一的工作就是生成其他对象。工厂能够以不同的方式呈现,但我认为抽象工厂模式非常强大。

抽象工厂不仅允许你在运行时更改已生成或已构建的对象,还可以在运行时更改工厂。虽然听起来有点迷糊,但是对于Spring或Unity等控制反转框架来说,它确实非常有效。

具体的代码如下所示:

接口Factory { T build(Metadata d)} 类ClientFactory实现Factory { Client build(Metadata d){//构建实际对象并返回 } }

每当我需要构建一个具体的对象,而且这个对象能够根据配置与简单的接口相匹配时,我都会尝试使用抽象工厂,并且我不希望使用该对象的其他所有类知晓该对象的变化。

这句话虽然很长,但核心思想符合其他软件工程原理的经典思想:即隐藏信息,一个类只做一件事,以及小接口。更直接地说,抽象工厂有助于隐藏对象的繁琐工作。

委托

我敢说,我们所有人都遇到过这样的项目(无论是否是编程的工作):我们将某方面的工作委托给其他人,而不是亲历亲为。

通常我们对项目进行进一步“升级”的时候,就会采用委托模式:项目协调人可能会将工作委托给一组助理,然后由他们将工作委托给自愿担任领导的人等。

代码中的委托模式也完全相同:高阶类要求低阶类为它们工作。这有助于保持高阶类的简单性,并减少对其下层结构的了解。

具体的代码如下所示:

接口Validator { bool validate(Object o)} 类ValidatorHelper实现Validator { Set 委托;bool validate(Object o){ for(Validator v:委托){ 如果(!v.validate(o))返回false } 返回true } } 类RestController { ValidationHelper helper; 响应addObject(Object o){ 如果(helper.validate(o))返回ErrorResponse //正常处理 } }

我发现委托模式可用于验证、排序、规范化等操作。常见的使用可能要视特定的数据形式而定,但做出有关数据决策的类不再需要完整地了解委托工作的细枝末节,它只需要知道工作已经完成。

建造/命名参数

在所有改变了我写代码方式的模式中,建造模式当属第一。从一开始我就用建造编写每个DTO(data transfer objects,数据传输对象)。生成器不需要大量的实际工作即可生成灵活且可扩展的代码,此外它们还具有不可变的好处!

其他语言可能没有(甚至不需要)建造模式,因为它们的构造器中拥有命名参数,且带有合理的默认值。从本质上讲,这是一码事:只声明需要设置成特定值的东西,而不必担心其他内容。

具体的代码如下所示:

类Dto { 字符串s int我私有Dto(String s,int i){ this.s = s this.i = i } public DtoBuilder builder(){ return new DtoBuilder() } 公共静态类DtoBuilder { private String s =“一些字符串“ private int i = 0public DtoBuilder withString(String s){ this.s = s returnthis } public DtoBuilder withInt(int it){ this.i =我 返回此 } public Dto build(){ 返回新的Dto( s,i) } } }

注意:在Java中,我们也使用Lombok处理所有的繁琐代码。

这种模式之所以可以让我的代码变得如此简单,原因是当所有对象都使用一个生成器时,就可以自动化新对象的生成。在我们的代码库中,我们总会向需要构建的类添加一个静态工厂方法,以返回生成器。

之后,我们只需遵循流畅的API链,传入变量,然后键入.build()。仅此而已。你无需花时间研究构造函数。你甚至不需要查看建造代码。你可以在写代码的时候随时使用。现代IDE中的自动补齐功能可以告诉你哪些变量。非常简单。

增强器(Enricher)

《设计模式》中没有提及这种模式,但它与责任链和模板方法的关系最密切。在这种模式下,每个“链”都可以增强或扩充一个对象,并将增强后的对象返回给调用者。它可以对链中的每个增强器都进行这种操作,而链也可以决定在需要时跳过链的其余部分。

你可能会认为这种做法会违反“干净的代码”中有关函数副作用的规则。而我认为这并没有违反这些原则的原因在于,增强器必须将增强后的对象返回给调用者,因此在很多时候,它只是在声明对象可能会变化。

调用者都知道,它可能是一个新对象(尤其是在不可变约束的情况下)。

接口Enricher { T rich(T something); } 类HeadersEnricher实现Enricher { 标头 rich(Headers标头){ headers.add(“ x-header”,“某物”) 返回标头 } }

我发现当你需要用新状态增强一个对象时,这种模式尤其管用。例如,如果你有一个来自Kafka流的对象,需要将一些数据添加到数据库中,然后再保存到数据仓库中,那么就可以考虑增强器模式。

以上这些只是我在编写简单易懂的代码时,最喜欢的一部分模式。我无法在一篇文章中介绍日常编程工作中使用的所有模式。

希望通过本文的介绍为你的编程工具锦上添花。

编程快乐!

原文:https://levelup.gitconnected.com/my-top-4-patterns-for-writing-simple-code-466705ac0b97

本文为 CSDN 翻译,转载请注明来源出处。

【End】

举报/反馈

这篇关于写计算机代码的简单软件,@程序员,四步教你写出简单易懂的代码!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772893

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计