第五章 弯曲,或折断

为了赶上今天近乎疯狂的变化步伐,我们需要尽一切努力编写尽可能宽松灵活的代码。否则,我们可能就会发现我们的代码很快就会变得过时,或是太脆弱,以至于难以清理。


1. 解耦与得墨忒耳法则

好篱笆促成好邻居

a) 把你的代码组织成最小组织代码(模块),并限制它们之间的交互.当我们要求某个对象完成特定服务时,我们想要它替我们完成该服务。我们不希望这个对象给我们一个第三方对象,我们必须对其加以处理才能获得所需的服务。对象间直接的横贯关系很可能很快带来依赖关系的组合爆炸

b) 德墨忒尔法则也叫“最少了解原理”,它旨在使模块之间的耦合减至最小。某个对象的任何方法都应该只调用属于以下情形的方法:

它自身

传入该方法的任何参数

它创建的任何对象

任何直接持有的组件对象

c) 使用德墨忒尔法则将使你的代码适应性更好、更健壮,但也有代价:作为“总承包人”,模块必须直接委托并管理全部子承包人,而不牵涉你的模块的客户。在实践中,这意味着你会编写大量包装方法,它们只是把请求转发给被委托者,这些包装方法既会带来运行时代价,还会带来空间开销。有时需要对该法则折中,通过反转德墨忒尔法则,来提升性能。

d) 除了逻辑上的解耦,在设计时还要考虑物理的解耦,考虑组成系统的文件、目录与库之间的关系。


2. 元程序设计

再多的天才也无法胜过对细节的专注。每次改动代码,都会有引入新的bug的危险

a) 动态配置

1) 要让系统变得高度可配置,文本提示、算法、数据库产品、界面风格等,让这些作为配置选项,而不是集成到系统里。

2) 可以使用元数据来描述应用的配置选项。元数据是关于数据的数据,更宽泛的说,是任何对应用进行描述的数据。

b) 元数据驱动的应用

1) 除了使用元数据来配置简单地偏好,还可以通过元数据配置和驱动应用。为了达到以声明方式思考(规定要做什么,而不是怎么做),并创建高度灵活的程序的目的,我们采用一条一般准则:把抽象放进代码,细节放进元数据。

2) 这样做的好处:迫使你接触你的设计的耦合,使程序更灵活;迫使你通过推迟细节处理,创建更健壮、更抽象的设计;虚无·无需重新编译应用,就可以对其进行定制。通过推迟大多数细节的定义,并尽可能让细节保持“软和”,让系统尽可能易于改动。

c) 商业逻辑。商业逻辑与政策更有可能发生变化,以一种非常灵活的格式维护它们很有意义。

d) 不要编写渡渡鸟代码。毛里求斯岛上的渡渡鸟不能适应人类和她们的家畜的出现,很快就灭绝了。同样的,没有元数据,代码就没有足够的适应性,项目也将很快“灭绝”。


3) 时间耦合

a) 时间在两个方面对软件很重要:并发(事情在同一时间发生)和次序(事情在时间中的相对位置)。大多数人的思考方式是线性的,总是先做这个,然后再做那个,但这会带来时间上的耦合。我们需要容许并发,并考虑接触任何时间或次序上的依赖。

b) 总是为并发进行设计

1) 编写线性代码,我们很容易做出一些假定。但并发迫使你更仔细地对问题进行思考-这不再是你一个人的舞会。

2) 必须对任何全局或静态变量加以保护,使其免于并发访问

3) 不管调用的次序是什么,都需要确保给出的是一致的状态信息。

c) 如果在设计时就考虑并发,可以更容易地满足可伸缩性或需求性能,而设法给非并发应用增加并发会困难很多。

欢迎关注我的个人公众号【菜鸟程序员成长记】

《程序员修炼之道》笔记(四)相关推荐

  1. 《JavaScript权威指南第四版》 电子版 电子书下载

    JavaScript权威指南第四版 图书评价:★★★★☆ 图书语言:简体图书 图书大小:19.11MB 图书格式:PDF 图书作者:David Flanagan 更新日期:2006-05-23 下载次 ...

  2. JavaScript权威指南笔记

    为什么80%的码农都做不了架构师?>>>    第二章   词法结构 JavaScript区分大小写:/html不区分大小写 JavaScript会忽略程序中标识(token)之间的 ...

  3. JavaScript权威指南笔记 - 1

    1. JS对象类型 基本类型: number.String.Boolean.null.undefined 对象类型:普通对象.数组.时间.方法等 2. JavaScript中的运算 JS中无穷大.无穷 ...

  4. JavaScript权威指南7(四) 第十一章 JavaScript 标准库

    Set和Map类 用于表示一组值以及从一组值到另一组值的映射. set 是值得集合,就像数组.但不同于数组,set 没有被排序或索引,并且它们不允许重复:值要么是集合的成员要么不是集合的成员,不能知道 ...

  5. JavaScript 权威指南笔记 - 可选的分号

    分号 只有缺少分号无法正确解析代码的时候会自动添加分号 var a a = 3 => var a; a = 3; var y = x + f (a + b).toString() => v ...

  6. javascript权威指南——笔记(第十章:正则)

    正则表达式是描述字符模式的对象 为什么使用正则: 1.找数字 1 var str = "12 f13kjm54n43 43k"; 2 var arr = []; 3 4 for(v ...

  7. 《JavaScript权威指南》笔记(四)

    2019独角兽企业重金招聘Python工程师标准>>> 第四篇笔记的内容主要涉及:javascript中的各种语句. 1. switch语句: (1)其中的case表达式采用===匹 ...

  8. 《JavaScript权威指南》笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> <JavaScript权威指南>真是名符其实的好书!真遗憾初学JavaScript时没有立即读这本书,甚为遗憾.不 ...

  9. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! JavaScript 权威指南-学习笔记 ...

  10. Javascript权威指南学习笔记一:数据类型

    决定从最基础的开始学JavaScript,最近看了<<Javascript权威指南>>第3章,记些笔记备忘. 本章一个重点是类型.按我的理解应该如下表所示: 复合类型中,关联数 ...

最新文章

  1. python caffe报错:No module named google
  2. linux下sudo命令[转]
  3. python是什么编程教程-编程python是什么_谁的Python教程最好?
  4. Magento利用input type=”file”上传图片
  5. Index of Unix
  6. 魅族android 版本 6.0下载,flyme6.0内测版
  7. qt坐标系统与布局的简单入门
  8. cocos2d-x 截取屏幕可见区域
  9. html页面 sql注入,使用html仅阻止SQL注入
  10. ExtJs4 基础必备
  11. urllib库(三)parse模块:quote()/quote_plus(),unquote()/unquote_plus(),quote_from_bytes()
  12. HSC-1th 2022 48h大赛 write-up
  13. centos 设置为北京时间
  14. oracle10g笔记1
  15. java dao 是什么_dao java是什么
  16. 21计科一班题单2---题解
  17. 会声会影编辑html,会声会影视频声音编辑
  18. 【视频】极值理论EVT与R语言应用:GPD模型火灾损失分布分析
  19. 记录实现Vue带参数调转页面
  20. bootstrap实现网页手风琴--博客园老牛大讲堂

热门文章

  1. R语言对爬取的天气数据进行整理
  2. 假如吴签这些热搜明星是程序员。。。
  3. 质量好又便宜的蓝牙耳机推荐,经济又实惠的蓝牙耳机盘点
  4. csgo fps不稳定和服务器,急~CS1.6转向CSGO FPS不稳定问题咨询
  5. 化妆品税率不变 部分电子产品调税会便宜
  6. Window7系统无线网络连接不可用?
  7. java获取微信小程序二维码
  8. python查看数据最后五行_python数据分析
  9. 第七周项目2-体重检测系统
  10. Fusion360 外壳开孔零件居中对齐的方法