当前位置: 首页 > news >正文

《代码整洁之道》第十二章:跌进

  简单设计的四条规则:

  • 运行所有测试;
  • 不可重复;
  • 表达了程序员的意图;
  • 尽可能减少类和方法的数量;

  以上规则按其重要程度排列。

     1、简单设计规则1:运行所有测试

  全面测试并持续通过所有测试的系统,就是可测试的系统。看似浅显,但却重要。不可测试的系统同样不可验证。不可验证的系统,绝不应部署。另外,很幸运,只要系统可测试,就会导向保持类短小且目的单一的设计方案。

  紧耦合的代码难以编写测试。编写测试越多,越遵循DIP规则,使用依赖注入、接口和抽象等工具尽可能减少耦合。如此一来,设计就有长足进步。

  2、简单设计规则2~4:重构

  有了测试,就能保证代码和类的整洁,方法就是递增式地重构代码。

  在重构过程中,可以应用有关优秀软件设计的一切知识。提升内聚性、降低耦合度、切分关注面,模块化系统性关注面,缩小函数和类的尺寸,选用更好的名称,如此等等。这也是应用简单设计后三条规则的地方:消除重复,保证表达力,尽可能减少类和方法的数量。

  3、表达力

  写出自己能理解的代码很容易,因为在编写时,你正深入于要解决的问题中。代码的其他维护这不会那么深入,也就不易理解代码。

  软件项目的主要成本在于长期维护。为了减低因修改产生的缺陷,应该理解系统时做什么的。代码写得越清晰,其他人华仔理解代码上的时间也就越少,从而减少缺陷,缩减维护成本。

  下一位读代码的人很可能是你自己,所以,多少尊重一下你的手艺吧。用心是最珍贵的资源。

  4、尽可能少的类和方法。

  在保持函数和类短小的同时,保持整个系统短小精悍。

  相比类和函数数量尽量少,测试、消除重复和表达力更为重要。

转载于:https://www.cnblogs.com/navirana/p/4807044.html

相关文章:

  • django 1.8 官方文档翻译:5-1-2 表单API
  • iOS--警告收录及科学快速的消除方法
  • java环境变量设置
  • jdk 安装配置
  • jsp中文显示乱码的解决办法
  • 携程App for Apple Watch探索
  • 从头开始敲代码之《从BaseApplication/Activity开始(三)》
  • 前端性能优化(十)
  • 汇编语言HelloWorld
  • n个元素的入栈顺序有多少种出栈顺序?
  • 迅维网
  • PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
  • win7系统中任务计划程序的使用与查询
  • 报表性能优化方案之数据集缓存与共享
  • 站在OC的基础上快速理解Swift的类与结构体
  • 【翻译】babel对TC39装饰器草案的实现
  • Android 控件背景颜色处理
  • C++类中的特殊成员函数
  • docker容器内的网络抓包
  • HTML5新特性总结
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spark RDD学习: aggregate函数
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • tab.js分享及浏览器兼容性问题汇总
  • Vue ES6 Jade Scss Webpack Gulp
  • windows下使用nginx调试简介
  • 搭建gitbook 和 访问权限认证
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 排序算法学习笔记
  • 设计模式(12)迭代器模式(讲解+应用)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 通信类
  • 新版博客前端前瞻
  • 源码安装memcached和php memcache扩展
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 数据库巡检项
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #Linux(Source Insight安装及工程建立)
  • (libusb) usb口自动刷新
  • (九)One-Wire总线-DS18B20
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十八)三元表达式和列表解析
  • (推荐)叮当——中文语音对话机器人
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Linux下编译安装log4cxx
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET gRPC 和RESTful简单对比
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题