迪米特法则

什么是迪米特法则

迪米特法则(Low of Demeter)又叫最少知识原则,一个类对其它类知道的越少越好。
迪米特法则可以简单说成:talk only to your immediate friends。

OOAD中的迪米特法则

LOD的初衷是降低类之间的耦合,每个类都尽量减少对其它类的依赖,所以,很容易使得
系统的功能模块功能独立,相互之间很少依赖关系。

LOD不希望类之间建立直接联系,类都是通过友元类进行转达。所以系统中就会存在中介类,
这些类之所以存在完全是为了传递类之间的相互调用关系:

  • facade 门面模式
  • Mediator 中介模式

设计类时应用迪米特法则

设计一个类时,类只能访问它直接的朋友:

  • 当前对象本身this
  • 参数方式传入到类方法中的对象(注入)
  • 创建对象自己或者初始化时涉及其它对象的方法,构造函数中涉及的其它对象
  • 它的直接子对象 类对象,可以调用这些它直接朋友对象的方法

参考文献

  1. 迪米特法则

如何指导TDD

技术特质

  • 开放
  • 坦诚
  • 勇气
  • 批评和自我批评
  • 快乐
  • 沟通
  • 团队协作

软件开发的现实

  • 随着时间的改变,软件也会改变。
  • 每个人都愿意去维护整齐优美的代码。 但是:
    1. 如何应付软件随时间的改变而改变?
    2. 如何编写健壮优美的代码?

没有进行单元测试的软件开发过程

broadcasting

测试驱动开发过程

broadcasting

测试哲学

不存在不能进行自动测试的程序。[Kent Beck]

测试驱动开发技术

  • 单元测试技术
    • 对代码片断外部行为的验证
    • 单元测试应该是交付代码的必不可少的一部分。
  • 代码重构
    • 不改变代码的外部行为而改变其内部结构使其更好理解,更容易扩展的过程
  • 单元测试是重构成功的关键。
  • 重构准则:改变一小步,测试,然后再改变一小步,测试……

编写单元测试的十大理由

  • 测试能减少增加新功能时的bug
  • 测试是最好的程序说明文档
  • 测试能降低改变代码的代价
  • 测试能改善代码的设计
  • 测试是重构成为可能
  • 测试强制你去思考软件实现的细节
  • 测试能加快开发进程
  • 测试能减少编写代码的恐惧,带来自信
  • 测试使你的每一片代码都建立的在扎实的基础之上。
  • 可用于回归测试,提高代码的可维护性, 保证代码长期质量。

Demo-猜数字

关键点分析: 技术和工具 随机生成不重复的4位数字 根据游戏者输入的数字,验证并返回结果

大话西游之单元测试[转载]

“我知道这个项目bug很多,无法按时完成,即使老板把我炒了也是应该的。曾经有一个做单元测试的机会放在我面前,我没有珍惜,等到后来项目雪崩了才后悔。如果上天能给我再来一次机会的话,我会对老板说:我要做单元测试!如果一定要在单元测试上加个日期,我希望是一直。”

参考文献

  1. 测试驱动开发和代码重构

TodoList

Todolist是什么

在各种代码IDE中,一般都会有TODO的标注功能,用于提醒程序员在开发是不至于忘了自己要实现的代码功能。
Todolist就是一个用来记录程序员计划要开发代码功能的清单。

Todolist什么时候编写

在tdd活动中,需要在编写代码之前将整个需要实现的功能分解好todolist。
编写Todolist的过程就是对这个需求进行功能分析的过程。

在敏捷开发中,BA将需求分解为用户故事,在一个迭代内,SM会跟踪DEV实现这个用户故事的进度。
但是这个进度很难进行度量,更多的是倚重SM的经验。
如果DEV在迭代开始时,就完成了Todolist,那么在开发人员的迭代泳道中,SM就可以比较客观的看到DEV的进度了。

如何编写Todolist

参考在进行OOAD时,我们会编写的用例文档,过程中一般我们会按照下面的顺序列出各种路径:

  • 主路径
  • 分支路径
  • 异常路径

将这些路径,参考实现方案的设计,根据波及与实现依赖,整理出一个可以编码实施的TDD用例实现清单。
这个清单就是Todolist。
为了在TDD实施时,容易落地,避免大用例,所以这个清单通常的组织用例的顺序是:

  • 分支路径
  • 异常路径
  • 主路径

编写Todolist的意义

  • 作为开发人员对任务分析与设计的DoD,BA对todolist的审查避免开发误解和错误的设计
  • Todolist可以确保开发人员把所有的分析都落实到代码上,不会因为大意而产生遗漏
  • tdolist可以确保开发人员仅实现需要做得内容,不会实现需求之外的功能
  • todolist的有序性可以确保开发人员可以按照顺序,一点点完成TDD开发过程,避免出现不知道如何编写用例的情况
  • 同时,又能帮助程序员在编写满足用例的代码时,是层层递进的完成开发,不会一下就涉及到过多的代码实现,导致绿的持续时间太长

备注

本文为原创内容,如果被您引用,我不胜荣幸。同时也请您在引用处标明出处,作为对我的鼓励。 —- 孙明辉 2022-01-15


微服务九大特征

微服务九大特征

  1. 服务组件化
  2. 按业务组织团队
  3. 做“产品”的态度
  4. 智能端点与哑管道
  5. 去中心化治理
  6. 去中心化管理数据
  7. 基础设施自动化
  8. 容错设计
  9. 演进式设计

—  原创作品许可 — 署名-非商业性使用-禁止演绎 3.0 未本地化版本 — CC BY-NC-ND 3.0   —