download:极客daxue架构师训练营
下崽ZY:https://www.zxit666.com/4210/
程序设计的好与坏,早在我们青葱岁月时就接触过了,只是那是并不知道这竟如此重要。能够立即改善程序设计、写出“好”代码的知识有以下几点:
?面向对象五个基本原则;?常见的三种架构;?绘图;?起一个好名字;?优化嵌套的 if else 代码;
当然,其他技术知识的丰富程度也决定了程序设计的好坏。例如通过引入消息队列解决双端性能差异问题、通过增加缓存层提高查询效率等。下面我们一起来看看,上面列出的知识点包含哪些内容,这些内容对代码和程序设计的改善有何帮助。
面向对象五个基本原则
本书作者是 2010 级学生,面向对象是作者青葱时期发展火热的编程范式。它的五个基本原则是:
?单一职责原则;?开放封闭原则;?依赖倒置原则;?接口隔离原则;?合成复用原则;
下面我们将通过对比和场景假设的方式了解五个基本原则对代码质量的影响。
立竿见影的单一职责原则
没错,立竿见影、效果卓越。对于我们这些自学编程无师自通的人来说,能把功能实现就可以了,根本没有时间考虑代码优化和维护成本问题。时光流逝,竟在接触编程很长一段时间后才发现它竟如此重要。
俗话说只要代码写的够烂,提升就足够明显。以一个从文件内容中匹配关键数据并根据匹配结果发出网络请求的案例,看看大部分程序员的写法:
import re
import requestsFILE = "./information.fet"def extract(file):
fil = open(file, "r")
content = fil.read()
fil.close()
find_object = re.search(r"url=\d+", content)
find = find_object.group(1)
text = requests.get(find)
return textif __name__ == "__main__":
text = extract(FILE)
print(text)
复制代码
需求已经实现,这点毋庸置疑,但是问题来了:
?如果读取文件的时候发生异常了怎么办??如果数据源发生变化该如何处理??如果网络请求返回的数据不符合最终要求怎么办?
如果你心里的第一个反应是改代码,那你就要注意了。完成一件事中间的某个环节发生变化,改代码是在所难免的,但是如果按照上面这种写法,不仅代码越改越乱,连逻辑也会越来越乱。单一职责原则表达的是让一个函数尽量只做一件事,不要将多件事混杂在一个函数中。
上面的代码如果重新设计,我认为至少应该是这样的:
def get_source():
"""获取数据源"""
returndef extract_(val):
"""匹配关键数据"""
returndef fetch(val):
"""发出网络请求"""
returndef trim(val):
"""修剪数据"""
returndef extract(file):
"""提取目标数据"""
source = get_source()
content = extract_(source)
text = trim(fetch(content))
return textif __name__ == "__main__":
text = extract(FILE)
print(text)
【极客daxue架构师训练营】复制代码
把原来放在一个函数中实现的多个步骤拆分成为多个更小的函数,每个函数只做一件事。当数据源发生变化时,只需要改动 get_source 相关的代码即可;如果网络请求返回的数据不符合最终要求,我们可以在 trim 函数中对它进行修剪。这样一来,代码应对变化的能力提高了许多,整个流程也变得更清晰易懂
推荐阅读
- springboot|真叼!你兼顾欧腾讯技术官分享的这份Springboot笔记吗(全到你怀疑人生······)
- dart|Flutter 架构
- 其他|计算机系统结构期末重点——数据表示与指令系统(计算机系统结构,李学干(第五版))(史上最详细)
- Java|云原生DevOps(k8s/docker/springcloudalibaba)
- 如何构建一个流量无损的在线应用架构 | 专题尾篇
- 云原生数据中台(让数据用起来|数据中台 第3章:数据中台建设与架构)
- [架构]|如何全面了解一个JAVA应用
- Java|又一款 Nginx 管理可视化神器,通过界面完成配置监控
- Java|Keycloak简单几步实现对Spring Boot应用的权限控制