《程序员修炼之道》阅读笔记5

news/2025/11/21 22:25:12/文章来源:https://www.cnblogs.com/clo3o/p/19254686

《程序员修炼之道》第五章"弯曲,或折断"阅读笔记
解耦与得墨忒耳法则
解耦是构建灵活、可维护系统的核心原则。书中提出的得墨忒耳法则(Law of Demeter)为降低模块间耦合提供了明确指导:对象的方法应只调用属于以下情形的方法:
自身(this)
传入的参数对象
自身创建的对象
组件对象(直接持有的成员变量)
违反法则的典型案例
典型问题表现为过度链式调用
实践建议
优先使用委托模式:通过中间层封装跨对象调用(如recorder.getTimeZone()而非直接访问Location)
警惕"火车失事"式调用:a.b().c().d()本质是将内部实现暴露为API
合理权衡性能与解耦:在高频调用场景可接受适度耦合,但需明确文档说明
元程序设计
元程序设计的核心思想是将变化的细节转移到代码外部,通过元数据驱动程序行为。书中提出"将抽象放进代码,细节放进元数据"的原则,典型应用包括:
元数据应用场景
元数据驱动方式将传统硬编码的配置、规则和布局等细节转移到代码外部,典型应用包括:
数据库连接配置:使用外部配置文件(如XML/JSON)替代代码中写死的URL和凭证
业务规则逻辑:通过规则引擎+规则配置文件替代大量条件判断语句
UI布局定义:采用XML布局文件+解析器替代代码生成控件
实现策略
配置文件驱动:使用纯文本格式(如.properties、YAML)存储环境变量
代码生成器:通过模板引擎根据元数据生成重复代码
动态脚本扩展:嵌入Lua/Python等脚本语言实现业务规则热更新
时间耦合
时间耦合指系统组件间隐含的时序依赖,典型表现为"必须先调用A方法才能调用B方法"。书中提出通过并发设计和异步通信解除这种耦合。
常见时间耦合问题
典型问题表现为组件间隐含的时序依赖,如"必须先调用init()才能使用组件",这种强依赖降低了系统的灵活性和容错性。
解决方案
状态管理模式:使用状态机显式管理组件生命周期(如定义UNINITIALIZED、READY、CLOSED等状态)
异步消息队列:通过生产者-消费者模型解耦处理顺序
事件驱动架构:发布-订阅模式实现状态变更通知(如订单状态变更事件)
实践启示
设计弹性系统:通过依赖注入(DI)和接口抽象,使组件可替换
自动化测试验证解耦效果:模块单元测试应能独立运行,无需启动整个系统
定期重构消除耦合:使用工具(如IntelliJ IDEA的依赖分析)检测高耦合模块
书中以OLTP系统架构为例,展示如何通过多层异步通信(输入进程→工作队列→应用服务器→数据库进程)彻底解除时间耦合,这种架构在高并发场景下能显著提升系统吞吐量和容错能力。
通过本章内容的实践,可有效提升代码的灵活性和可维护性,尤其在需求频繁变化的业务系统中,元数据驱动和事件驱动架构能大幅降低变更成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/972590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java面向对象知识补充

static静态变量补充知识:static静态变量:数据只需要一份,且需要被共享时(访问,修改)例如,记录全局某个数量。 实例变量:每个对象都要有一份,数据各不同。(普通定义)静态方法静态方法可以用来设计工具类。工…

团队作业 3 - 教学课件和班级管理系统 需求改进 系统设计 - WAR

一、需求 & 原型改进(20 分)课堂讨论问题及修改(5 分)问题 1 修改 1课件格式支持单一(仅支持 PPT/PDF) 增加视频(MP4)、音频(MP3)格式课件上传与在线预览支持成绩统计维度单一(仅平均分) 新增最高分、…

win11下载安装python,命令提示符输入python,打开Microsoft store界面,解决方案

win11下载安装python,命令提示符输入python,打开Microsoft store界面,解决方案1.找到python安装路径, C:\Users\33723\AppData\Local\Programs\Python\Python314 C:\Users\33723\AppData\Local\Programs\Python\Py…

卷积神经网络的引入3 —— MLP 与 CNN 在更大数据集上的性能对比实验

卷积神经网络的引入3 —— MLP 与 CNN 在更大数据集上的性能对比实验 在前两篇文章中,我们分别验证了:MLP 对平移等扰动非常敏感,而 CNN 具备更好的鲁棒性 在 Fashion-MNIST(低维灰度图)下,MLP 与 CNN 的表现差距…

全网都在找的Nano Banana Pro API 来了!便宜稳定0.15/张

Nano Banana Pro(Gemini 3 Pro Image)是Google基于Gemini 3 Pro开发的新一代图像生成与编辑模型,它不仅在图像质量上达到了新的高度,更在文字渲染、多图像融合和实时信息整合方面带来了突破性的进展。本文将带你全…

通过DataReader获取sql查询的字段元数据信息

原理 应用程序调用 GetSchemaTable()↓ ADO.NET 驱动程序生成元数据查询SQL↓ 发送到数据库服务器执行↓ 数据库返回结果集架构信息(不包含实际数据)↓ ADO.NET 解析架构信息并构建 DataTable↓ 返回包含完整列信息的…

Docker命令入门

Docker命令入门1. 使用容器运行 Nginx 应用 1.1 使用 docker run 命令运行 Nginx 应用 1.1.1 观察下载容器镜像过程查找本地容器镜像文件执行命令过程一:下载容器镜像 $ docker run -d nginx:latestUnable to find im…

2025.11.21 - A

今天形势与政策,听了一些国际形势,收获颇丰

2025年新版ADB工具箱下载+驱动+ADB指令集+fastboot刷机ROOT程序

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P7960 [NOIP2021] 报数__洛谷题解

P7960 [NOIP2021] 报数 题目描述 报数游戏是一个广为流传的休闲小游戏。参加游戏的每个人要按一定顺序轮流报数,但如果下一个报的数是 \(7\) 的倍数,或十进制表示中含有数字 \(7\),就必须跳过这个数,否则就输掉了游…

The 5W2H Problem-Solving Method

The 5W2H Problem-Solving Method https://www.msicertified.com/wp-content/uploads/2024/02/The-5W2H-Problem-Solving-Method.pdf 出处:http://www.cnblogs.com/lightsong/本文版权归作者和博客园共有,欢迎转载,但…

题解:SP5830 ALTPERM - Alternating Permutations

题意:给你 \(K\) 个下标,保证 \(A_1=1,A_K=N\),且对任意的 \(i<N\) 有 \(A_i<A_{i+1}\)。 如果一个排列,在下标 \(A_1\) 到 \(A_2\) 处单调递增,在下标 \(A_2\) 到 \(A_3\) 处单调递减,在下标 \(A_3\) 到 …

图床创建:github+Picgo+obsidian 带有同步删除的自动上传

最近一直在做DL部分的学习笔记,一个比较麻烦的地方就是我一直用的obsidian做笔记内容,在博客园导入随笔后,图片的链接一直是我的本地路径,自然无法显示,于是我只好在导入随笔后再把图片一张张上传到博客园的图床上…

重组生长因子全面解析:从结构功能到科研应用指南

重组生长因子是现代生命科学研究中不可或缺的重要工具,它们通过基因工程技术在体外表达和纯化获得,为细胞生物学、发育生物学及信号转导研究提供了高纯度、高活性的关键试剂。作为科研试剂,重组生长因子以其精确的序…

2055.11.21

十点睡醒起床,吃饭 然后洗澡回宿舍上网课,开团会,出去吃饭,回宿舍准备睡觉

Dify异步接口调用优化实践:解决长时任务处理与网络超时疑问

Dify异步接口调用优化实践:解决长时任务处理与网络超时疑问pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

STM32系统时钟与SysTick定时器

一、系统嘀嗒定时器(SysTick)全面解析 1. SysTick定时器基本概念 定时器是STM32 中常用的外设,一般定时器的基本功能就是定时,而在Cortex M3/M4 内核中也包含一个简单的定时器,就是系统嘀嗒定时器(Systick),它是属…

【251121】CF2171 Div.3 vp 总结

老师说让我尝试体验快乐 AK,但是我失败了。 还是太菜了喵! 题目梗概题目编号 题目名称 题目链接A Shizuku Hoshikawa and Farm Legs LinkB Yuu Koito and Minimum Absolute Sum LinkC1 / C2 Renako Amaori and XOR G…

OI 笑传 #32

なんてったって春今天是 bct Day2,赛时 \(40+60+10+0=110\),rk 70。 挂分原因是被 vector 卡常了/fn。然后 T4 捆绑 Sbt#1 T 了一个于是又没了 20pts。 评价是 ok 场,练习了对拍的使用。 发现 hm2ns 总是会随口否掉…