《程序员修炼之道》2

一、设计原则:消除冗余与耦合
DRY原则
核心:系统中的每一项知识必须有单一、权威的表示,避免重复导致维护成本激增
重复类型:
强加性重复(如代码与文档重复):通过代码生成器或自动化文档工具解决
无意识重复(设计缺陷):例如线段类中冗余存储长度属性,应改为计算字段。
开发者间重复:通过团队交流、代码审查和共享工具库减少
正交性(解耦)
定义:组件间依赖最小化,修改一处不影响其他部分
分层架构(如MVC分离模型与视图)
避免全局数据,使用接口而非具体实现
二、工具与实践:提升效率与质量
版本控制与自动化
Git为核心:即使单人开发也需使用,避免“无版本代码即不存在”。
脚本化一切:自动化测试、部署和构建(如Shell/Python脚本),减少人为错误
调试与编辑器技巧
调试方法:二分法定位问题、橡皮鸭调试法(向他人解释代码逻辑)。
编辑器能力:掌握快捷键、正则表达式和宏,提升编码效率。
代码生成与元数据
代码生成器:消除重复样板代码(如DTO类生成)。
元数据驱动:将易变细节(如配置)移出代码,用元数据动态控制行为。
三、防御策略:保障代码健壮性
合约设计
前条件/后条件:明确函数输入输出的合法范围,通过断言(Assertions)实现
早崩溃原则:发现问题立即终止,避免错误扩散(如无效数据导致后续逻辑混乱)
异常处理与防御性编程
异常用于异常情况:避免用异常处理正常逻辑,确保代码去异常后仍能运行。
输入验证:假设外部数据不可信,严格校验边界条件4。
重构与测试驱动开发(TDD)
持续重构:发现代码“坏味道”(如重复、长函数)立即优化8。
TDD流程:先写测试用例,再实现功能,确保代码可测性与正确性8。
四、灵活架构:应对变化与复杂性
解耦技术
得墨忒耳法则:限制对象间直接依赖(如a.b.Method()违反法则,应封装为a.Method()。
事件驱动与观察者模式:模块间通过发布/订阅机制通信,减少显式耦合。
时间耦合与并发设计
减少时序依赖:分析工作流并发可能性,设计异步接口(如消息队列)。
黑板系统:模块匿名共享数据空间(如JavaSpaces),实现完全解耦。
原型与曳光弹开发
原型验证风险:针对不确定领域(如性能、架构)快速构建可抛弃原型。
曳光弹迭代:先实现核心功能链路,再逐步扩展,确保早期用户反馈与集成验证

posted @ 2025-04-21 21:52  曹明阳  阅读(10)  评论(0)    收藏  举报