敏捷开发
feifeilb
架构设计爱好者
展开
-
敏捷软件开发 - 原则、模式与实践 —— 设计模式(十二)STATE模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第29章STATE模式STATE模式既具有switch/case语句的效率又具有解释迁移表的灵活性。上图展示该模式的结构。Turnstile类拥有关于事件的公有方法以及关于动作的受保护方法。它持有一个指向TurnstileState接口的引用。当Turnstile的两个事件方法中的一个被调用时,它就把这个事件委托给Turn...原创 2020-02-23 18:30:59 · 424 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(十一)VISITOR模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第28章VISTOR模式系列允许在不更改现有层次结构的情况下向其中增加新方法。该系列中的模式如下VISITOR模式ACYCLIC VISITOR模式DECORATOR模式EXTENSION ObJECT模式VISITOR模式这个结构,可以通过增加新的ModemVisitor派生类来增加新的操作系统配置函数,而...原创 2020-01-11 22:57:48 · 312 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(十)PROXY模式和STAIRWAY TO HEAVEN模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第26章PROXY模式PROXY模式具有一个非常大的好处:重要关系的分离。在上面的例子中,业务规则和数据库就被完全分开了。在那些把业务 规则和数据库实现分离显得非常重要的情况中,PROXY模式是很适用的。就此而言,PROXY模式可以用来分离业务规则和任何种类的实现问题。它可以用来防止业务规则被诸如:COM、COBRA、EJB...原创 2020-01-06 21:53:34 · 358 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(九)ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第25章ABSTRACT SERVER模式如上图在Switch和Light之间引入一个接口,这样就使得Switch能够控制任何实现了这个接口的东西。这立即就满足了DIP和OCP。这个就是ABSTRACT SERVER模式。请注意接口的名字是从它的客户的角度起的。它被称为Switchable而不是ILight。我们在前面已经...原创 2020-01-06 21:51:38 · 276 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第24章上图展示了OBSERVER模式的规范形式。在本例中,Clock被DigitalClock观察。DigitalClock通过Subject接口注册到Clock中。无论任何原因,只要时间一改变,Clock就调用Subject的notify方法。而Subject的notify方法会调用每个已注册Observer对象的upda...原创 2020-01-06 20:43:41 · 180 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(七)COMPOSITE模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第23章COMPOSITE模式是一个非常简单但具有深刻内涵的模式。上图中展示了COMPOSITE模式的基本结构。图中是一个形状类层次结构。基类Shape有两个派生类:Circle和Square。第3个派生类时一个组合体。CompositeShape持有一个含有多个Shape实例的列表。当调用CompositeShape的dr...原创 2020-01-06 20:41:23 · 178 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(六)FACTORY模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第21章工厂模式允许我们只依赖于抽象接口就能创建出具体对象的实例。所以,在正在进行的开发期间,如果具体类时高度易变的,那么该模式是非常有用的。结论工厂是有效的工具。在遵循DIP方面工厂有着重大的作用。它们使得高层策略模块在创建类的实例时无需依赖于这些类的具体实现。它们同样使得在一组类的完全不同系列的实现间进行切换成为可能。...原创 2020-01-06 20:38:49 · 193 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(五)NULL OBJECT模式
该模式会消除对null进行检查的需要,并且有助于简化代码。public interface Employee { public bool isTimeToPay(DateTime time); public void pay(); public static final Employee NULL = new Employee() { public bool Is...原创 2019-10-19 17:36:47 · 156 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(四)SINGLETON模式和MONOSTATE模式
介绍本节讲述了两个强制对象单一性的模式。这两个模式有着非常不同的“代价/收益”权衡。在大多数情况下,它们的实时代价远低于它们的表达力带来的收益。SINGLETON模式public class Singleton { private static Singleton theInstance = null; private Singleton() {} public static...原创 2019-10-19 17:34:11 · 177 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(三)FACADE模式和MEDIATOR模式
介绍这两个模式有着共同的目的。它们都把某种策略施加到另外这一组对象上。FACADE模式从上面施加策略,而MEDIATOR模式则从下面施加策略。FACADE模式的使用是明显且受限的,而MEDIATOR模式的使用则是不明显且不受限的。FACADE模式图1MEDIATOR模式图2图2展示了QuickEntryMediator的结构。用一个JList和一个JTextField构造了一个Quic...原创 2019-10-19 17:23:40 · 217 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(二)TEMPLATE METHOD模式和STRATEGY模式
介绍TEMPLATE METHOD模式和STRATEGY模式都可以分离通用的算法和具体的上下文。在软件设计中经常会看到这样的需求。我们有一个通用的算法。为了遵循依赖倒置原则(DIP),我们想确保这个通用的算法不要依赖于具体的实现。我们更想使这个通用的算法和具体的实现都依赖于抽象。不同的是,TEMPLATE METHOD模式使用继承来解决问题,而STRATEGY模式使用的则是委托。TEMPLAT...原创 2019-10-19 17:13:51 · 243 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(一)COMMAND模式和ACTIVE OBJECT模式
COMMAND模式COMMAND模式是最简单、最优雅的模式之一。它的适用范围非常广泛。图1ACTIVE OBJECT模式ACTIVE OBJECT模式是我最喜欢使用COMMAND模式的地方之一。这是实现多线程控制的一项古老技术。该模式有多种使用方式,为许多工业系统提供了一个简单的多任务核心。图2结论COMMAND模式的简单性掩盖了它的多功能性。COMMAND模式可以应用于多种不同的美...原创 2019-10-19 17:07:27 · 354 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(八)包的耦合性原则
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第20章后半部分包的耦合性原则无环依赖原则(ADP - The Acyclic Dependencies Principle )在包的依赖关系图中不允许存在环。解除依赖环的方法使用依赖倒置原则。创建一个新包,把共同依赖的类移动到新包里面。稳定依赖原则(SDP - The Stable-Dependencies P...原创 2019-10-15 21:56:52 · 394 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(七)包的内聚性原则
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第20章前半部分包的内聚性原则重用发布等价原则(REP - The Reuse/Release Equivalence Principle)重用的粒度就是发布的粒度REP指出,一个包的重用粒度可以和发布粒度一样大。我们所重用的任何东西都必须同时被发布和跟踪。简单的编写一个类,然后声称它是可重用的做法是不现实的。只有在建立一...原创 2019-10-15 21:45:43 · 352 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(六)接口隔离原则
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第12章。接口隔离原则(ISP - The Interface Segregation Principle)不应该强迫客户依赖于它们不用的方法。这个原则用来处理“胖”接口所具有的缺点。如果类的接口不是内聚的,就表示该类具有“胖”的接口。换句话说,类的“胖”接口可以分解成多组方法。每一组方法都服务于一组不同的客户程序。这样,一...原创 2019-10-14 22:13:47 · 318 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(五)依赖倒置原则
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第11章。依赖倒置原则(DIP - The Dependency-Inversion Principle)a. 高层模块不应该依赖于低层模块。二者都应该依赖于抽象。b. 抽象不应该依赖于细节。细节应该依赖于抽象。请考虑一下当高层模块依赖于低层模块时以为着什么。高层模块包含了一个应用程序中的重要的策略选择和业务模型。正是这些...原创 2019-10-14 22:06:02 · 231 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(四)里氏替换原则
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第9章。里氏替换原则(LSP - The Liskov Substitution Principle)子类型必须能够替换掉它们的基类型。问题对于LSP的违反常常会导致以明显违反OCP的方式使用运行时类型辨别。这种方式常常是使用一个显示的if语句或者if/else链去确定一个对象的类型,以便于可以选择针对该类型的正确行为。...原创 2019-10-14 21:58:28 · 216 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(三)开放-封闭原则
开放-封闭原则 (OCP - The Open/Closed Principle)软件实体(类、模块、函数等等)应该是可以扩展的,但是不能修改的。对于扩展是开放的。对于更改是封闭的。关键是抽象一般而言,无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。没有对于所有的情况都贴切的模型。既然不可能完全封闭,那么就必须有策略的对待这个问题。也就是说,设计人员必须对于他设计的模块应该对哪种...原创 2019-10-12 22:04:42 · 222 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(二)单一责任原则
单一责任原则 (SRP - Single-Responsibility Principle)就一个类而言,应该仅有一个引起它变化的原因。在SRP中,我们把职责定义为‘变化的原因’。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。如果决定职责的粒度,要依赖于具体程序的变化方式。如果程序的变化会影响某一个细分职责,那就肯定要分开它们,否则会带来僵化性的臭味。但如果应用...原创 2019-10-12 21:51:53 · 312 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(一)设计的臭味
设计的臭味僵化性僵化性是指难以对软件进行改动,即使是最简单的改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。必须要改动的模块越多,设计就越僵化。脆弱性脆弱性是指,在进行一个改动时,程序的许多地方就可能出现问题。常常是,出现新问题的地方与改动的地方并没有概念上的关联。牢固性牢固性是指,设计中包含了对其他系统有用的部分,但是要把这些部分从系统中分离出...原创 2019-10-12 21:46:27 · 378 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践
起源《敏捷软件开发 - 原则、模式与实践》是我接触到的第一本系统介绍软件设计的书籍,深刻影响了个人的软件开发习惯。它并不难懂,我一直推荐给身边的各个层次的程序员学习。可对于一本接近500页的图书,很多人还是望而却步。一直都想写个关于这本书的速读,使更多的人了解它。但是最近又重新学习了一遍发现它之所以有价值不仅仅在于书中总结的原则和模式,更在于它提供的如何运用这些原则、模式的实践例子。忽略了大量...原创 2019-10-11 22:45:23 · 2212 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 敏捷开发(二)
本文对应原书第3章 ~ 第6章。计划初始探索在项目开始时,开发人员和客户会尽量确定出所有真正重要的用户用例。但,他们不会试图去确定所有的用户用例。注意用例的大小,过大或过小都不利于工作量的评估。发布计划根据开发速度,客户选择下面2-4个月需要完成的用户用例,并排列这些用例的优先级。发布计划可以调整。迭代计划根据开发速度,客户选择下面2周需要完成的用户用例,并排列这些用例的...原创 2019-10-11 22:12:09 · 292 阅读 · 0 评论