随笔分类 - 敏捷软件开发
摘要:第20章 咖啡的启示 这个例子对于教学有很多好处。它短小、易于理解并且展示了如何应用面向对象设计原则去管理依赖和分类关注点。但从另一方面来说,它的短小也意味着这种分离带来的好处可能抵不过其成本。就当做一个设计思路来看吧。20.1 Mark IV型专用咖啡机20.1.1 规格说明书 Mark IV...
阅读全文
摘要:第19章 类图 19.1 基础知识19.1.1 类 类一般表示成下面的样子:分成格间的类图标以及对应的代码 注意类图标中变量和函数名前面的符合。(-)表示private;(#)表示protected;(+)表示public。19.1.2 关联 类之间的关联表示的是那些持有对其他对象引用的实例变...
阅读全文
摘要:第16章 对象图 有时,呈现出系统在某个特定时刻的状态是非常有用的。和一个正在运行系统的快照类似。UML对象图展示了在一个给定时刻获取到的对象、关系和属性值。 不过,你应该对花太多的对象图保持警惕。在大部分的情况下,它们都可以从相应的类图中直接推导出来,因此没有多少用处。第17章 用例 在所...
阅读全文
摘要:第15章 状态图 在描述有限状态机(FSM)方面,UML提供个丰富的符合。15.1 基础知识 下图是一个简单的状态迁移图(STD),该图描述了控制用户登录到系统的FSM。圆角矩形表状态。上层格间放置每个状态的名字。下层格间中放置的是一些特定动作,表示当进入或退出该状态时要做什么。 图中左上角的...
阅读全文
摘要:第14章 使用UML 在探索UML的细节之前,我们应该先讲讲何时以及为何使用它。UML的误用和滥用已经对软件项目造成了太多的危害。14.1 为什么建模 建模就是为了弄清楚某些东西是否可行。当模型比要构建的真实实体便宜很多时,我们就会使用模型来研究设计。14.1.1 为什么构建软件模型 当我们有...
阅读全文
摘要:第13章 写给C#程序员的UML概述 UML包含3类主要的图示。静态图(static diagram)描述了类、对象、数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构。动态图(dynamic diagram)展示了软件实体在运行过程中是如何变化的,其中描述了运行流程或者实体改变...
阅读全文
摘要:第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法。 这个原则用来处理“胖”接口所存在的缺点。如果类的接口不是内敛的,就表示该类具有“胖”接口。换句话说,类的“胖”接口可以分解成多组方法。每一组方法都服务于一组不同的客户程序。这样,一些客户程序可以使用一组成员函数,而其他客...
阅读全文
摘要:第11章 DIP:依赖倒置原则DIP:依赖倒置原则:a.高层模块不应该依赖于低层模块。二者都应该依赖于抽象。b.抽象不应该依赖于细节。细节应该依赖于抽象。11.1 层次化 下图展示了一个简单的层次化方案: 高层的Policy层使用了低层的Mechanism层,而Mechanism层又使用了更细节...
阅读全文
摘要:第10章 LSP:Liskov替换原则 Liskov替换原则:子类型(subtype)必须能够替换掉它们的基类型(base type)。10.1 违反LSP的情形10.1.1 简单例子 对LSP的违反导致了OCP的违反:struct Point { double x, y;}public enu...
阅读全文
摘要:第9章 OCP:开放-封闭原则 软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。9.1 OCP概述 遵循开放-封闭原则设计出的模块具有两个主要特征: (1)对于扩展是开放的(open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进...
阅读全文
摘要:第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因。8.1 定义职责 在SRP中我们把职责定义为变化的原因。如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。同时,我们很难注意到这一点。我们习惯于以组的形式去考虑职责。违反SRP的示例代码:public inter...
阅读全文
摘要:第7章 什么是敏捷设计 可以使用许多不同的媒介描述设计,但是设计最终体现为源代码。从根本上讲,源代码就是设计。7.1 设计臭味 如果幸运,你会在项目开始时就想到了系统的清晰图像。系统设计是存在你脑中的一幅至关重要的图像。如果幸运一点,在首次发布时,设计依然保持清楚。 接着,事情开始变糟。软件像...
阅读全文
摘要:第5章 重构 在Martin Fowler的名著《重构》一书中,他把重构定义为:“在不改变代码外在行为的前提下对对代码做出修改,以改进代码内部结构的过程。”可是我们为什么要改进已经能够工作的代码结构呢?我们不是都知道“如果它没有坏,就不要去修理它!”吗? 每一个软件模块都有3项职责。第一个职责是...
阅读全文
摘要:第4章 测试 编写单元测试是进行验证,更是进行设计。同样,它更是在编写文档。编写单元测试终结了许多反馈循环,尤其是功能验证方面的反馈循环。4.1 测试驱动开发 假设我们遵循如下3条简单规则: (1)除非编写了一个不能通过的单元测试,否则不编写任何产品代码。 (2)只要编写正好导致测试不通过...
阅读全文
摘要:第3章 计划3.1 初始探索 在项目开始时,开发人员会和客户商讨一下关于新系统的情况,以确定出所有真正重要的信息。然而,他们不会试图去确定所有的特性。随着项目的进展,客户会不断的发现新的特性。特性发现的过程会一直持续到项目完成。 当识别出一个特性时,会把它分解成一个或者多个用户故事,并把这些用户...
阅读全文
摘要:第2章 极限编程概述作为开发人员,我们应该记住,XP并非唯一选择。--Pete McBreen,软件技术专家在第1章中,我们概述了有关敏捷软件开发方法方面的内容,但它没有确切地告诉我们去做些什么;其中给出了一些泛泛的陈述和目标,却没有给出实际的指导方法。本章要改变这种状况。2.1 极限编程实践2.1...
阅读全文
摘要:第1章 敏捷实践敏捷软件开发宣言:人和交互 重于 过程和工具可以工作的软件 重于 面面俱到的文档客户合作 重于 合同谈判随时应对变化 重于 遵循计划虽然右项也有其价值,但左项更加重要。1.人和交互重于过程和工具 人是获得成功的最为重要的因素。如果团队中没有优秀的成员,那么就算是使用好的...
阅读全文

浙公网安备 33010602011771号