2017-09-06 22:36:56 realDonaldTrump 阅读数 143
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

敏捷开发原则

  1. 不要为代码添加基于猜测的、实际不需要或并不一定需要或目前暂时不需要的功能。
  2. 如果不清楚一个系统是否需要某个功能或采用某种设计结构,则一般不要急于去实现它或急于去采用这种设计模式。
  3. 实际上,通过重构来完成新功能或新设计模式并不困难,只有在确认某个功能必需或需要某个设计模式的时候,添加的功能或重构使用的设计模式才有意义。
2020-01-11 22:57:48 feifeilb 阅读数 8
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第28章

VISTOR模式系列允许在不更改现有层次结构的情况下向其中增加新方法。

该系列中的模式如下

  • VISITOR模式
  • ACYCLIC VISITOR模式
  • DECORATOR模式
  • EXTENSION ObJECT模式

VISITOR模式

图1
这个结构,可以通过增加新的ModemVisitor派生类来增加新的操作系统配置函数,而完全不用对Modem层次结构进行更改。所以,VISITOR模式使用ModemVisitor的派生类代替了Modem层次结构中的方法。

这之所以被称为双重分发是因为它涉及了两个多态分发。第一个分发是accept函数。该分发辨别出所调用的accept方法所属对象的类型。第二个分发是visit方法,它辨别出要执行的特定函数。这两个分发赋予了VISITOR模式非常快的执行速度。

VISITOR模式中的两次分发形成了一个功能矩阵。在Modem的例子中,矩阵的一条轴是不同类型的Modem。另一条轴是不同类型的操作系统。该矩阵的每个单元都被一项功能填充,该功能描绘了如何把特定的Modem初始化为可以在特定的操作系统中使用。

ACYCLIC VISITOR模式

如果程序中要更改的层次结构不需要经常地增加新的派生类,那么VISITOR模式工作的很好。但是,如果被访问层次结构非常不稳定,经常需要创建许多新的派生类,那么每当向被访问层次结构中增加一个新的派生类时,就必须要更改并且重新编译Visitor基类以及它的所有派生类。在C++中,情况甚至更糟。每当增加任何一个新的派生类时,整个被访问层次结构就必须要被重新编译、重新部署。

可以使用一个成为ACYCLIC VISITOR模式的变体来解决这个问题。该变体把Visitor基类变成退化的,从而解除了依赖环。这个类中没有任何方法意味着它没有依赖于被访问层次结构的派生类。

图2
由于转型需要花费大量的执行时间,并且这些时间是不可预测的,所以ACYCLIC VISITOR模式不适用于严格的实时系统。该模式的复杂性可能同样会使它不适用于其他的系统。但是,对于那些被访问的层次结构不稳定,并且增量编译比较重要的系统来说,该模式是一个不错的选择。

正像VISITOR模式创建了一个功能矩阵(一个轴是被访问的类型,另一个轴是要执行的功能)一样,ACYCLIC VISITOR模式创建了一个稀疏矩阵。访问者类不需要针对每一个被访问的派生类都实现visit函数。例如,如果Ernie Modem不可以配置在UNIX中,那么UnixModemConfigurator就不会实现ErnieVisitor接口。因此,ACYCLIC VISITOR模式允许我们忽略某些派生类和功能的组合。有时,这可能是一个有用的优点。

DECORATOR模式

另一个可以在不改变现有类层次结构的情况下向其中增加新方法的模式是DECORATOR模式。

图3
ModemDecorator子类的dial方法首先执行自己的特殊操作,然后委托调用它包含的Modem实例
的dial方法。

EXTENSION OBJECT模式

还有另外一种方法可以在不更改类层次结构的情况下向其中增加功能,那就是使用EXTENSION OBJECT模式。这个模式虽然比其他模式复杂一些,但是它也更强大、更灵活一些。层次结构中的每个对象都持有一个特定扩展对象(extension object)的列表。同时,每个对象也提供一个通过名字查找扩展对象的方法。扩展对象提供了操作原始层次结构对象的方法。

例如,再次假设我们有一个材料单系统。我们想让该层次结构中的每个对象都具有创建表示自身的XML的能力。我们可以把toXML方法放到层次结构中,但是这回违反SRP。我们不希望把有关XML的内容和有关BOM的内容放到同一个类中。虽然我们可以使用VISITOR模式来创建XML,但是这无法使我们把针对每种不同类型BOM对象的XML生成代码分离。在VISITOR模式中,针对每个BOM类的所有XML生成代码都会在同一个VISITOR对象中。

EXTENSION OBJECT模式提供了一个实现这个目标的优雅方案。下图展示了具有两个不同类型扩展对象的BOM层次结构。一种扩展对象把BOM对象转换成XML。另一个扩展对象把BOM对象转换成CSV。第一种扩展对象通过getExtension(“XML”)获得,第二种扩展对象通过getExtension(“CSV”)获得。图中<>表示一个标记接口(也就是没有任何方法的接口)。

图4

结论

VISITOR模式是由诱惑力的。在它们面前很容易会失去自制力。如果它们有用就去使用它们,但是请对它们的必要性保持健康的怀疑。通常,可以使用VISITOR模式解决的问题往往也可以使用更简单的方法解决。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

2015-01-18 16:01:37 SUNSHANGJIN 阅读数 1894
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

      

敏捷开发-原则 模式与实践

       这的确是一本关于开发者的好书,对于我们开发者、研究人员,它提出了一个开发的全新的价值观(对我来说),甚至人生都有启发。需要认真阅读。

书中总结了敏捷开发的实例,确确实实更够感觉到对于项目的完成大有裨益,有种相读恨晚的感觉。想想自己之前的开发状态,想想自己导师安排公司项目的情况,就是低效率,就是小儿科,就是书上批评讽刺的那样,这正是开发者十几年开发智慧的结晶,前人的经验,前人的智慧,激发了我的阅读的快感,我获取知识的兴奋感,激发了我的成就感。

 

阅读前两天(结合思维导图)

敏捷开发联盟:开发团队需要具有快速工作、相应变化的能力的价值观和原则。

敏捷过程,最重要的是极限编程。


极限编程(extreme programming):一种适用于中小型团队在需求不明或者快速多变的情况下。(参考:http://www.docin.com/p-752508108.html


计划



学到的新名词:

项目涉众产品或项目相关所有人员,包括:客户、用户、需求分析员、开发人员、测试人员、文档编制人员、项目经理、法律人员、生产人员、市场营销、技术支持及其他与产品和客户打交道的人员。

用户素材:项目需要相关的卡片,包括估算代价、优先级

项目迭代:每两周实现一些涉众的需求,每次迭代完成时,会演示迭代生成的系统,获得反馈。

结对编程:结对的程序员,在同一台电脑上完成代码。

发布计划:一次发布大约需要3个月的时间,即约6次迭代。

QA部门:即quality assurance,质量保证部门。

UML图:统一建模语言,是用来对软件密集系统进行可视化建模的一种语言。

(视频课程http://study.163.com/course/courseLearn.htm?courseId=393009#/learn/video?lessonId=510175&courseId=393009 )

重构:重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

发布计划:项目发布时间的计划,约需要3个月的时间,即约6次迭代。

任务计划:把素材分解成开发任务,每个任务约花费4-16小时,开发人员签订任务的计划。(任务点数:完成任务所需要的理想编程时间)

迭代计划:每两周进行一次项目迭代的计划。

程序耦合性:耦合性是程序结构中各个模块之间相互关联的度量。程序需要低耦合性。



2019-10-11 22:45:23 feifeilb 阅读数 41
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

起源

《敏捷软件开发 - 原则、模式与实践》是我接触到的第一本系统介绍软件设计的书籍,深刻影响了个人的软件开发习惯。它并不难懂,我一直推荐给身边的各个层次的程序员学习。

可对于一本接近500页的图书,很多人还是望而却步。一直都想写个关于这本书的速读,使更多的人了解它。但是最近又重新学习了一遍发现它之所以有价值不仅仅在于书中总结的原则和模式,更在于它提供的如何运用这些原则、模式的实践例子。忽略了大量例子的速读文章,也丢失了原书最重要的部分。最后,决定写一篇原书要点的总结,后来发现即使只是记录要点,也需要多篇文章才能表述清楚。这就有了这个系列文章。

最后强调,本系列仅适合于新读者快速了解原书概要,以及老读者重温原书要点。对于新读者,强烈建议购买原书仔细学习。

京东购买地址
当当购买地址

系列

敏捷开发

敏捷软件开发 - 原则、模式与实践 —— 敏捷开发(一)

敏捷软件开发 - 原则、模式与实践 —— 敏捷开发(二)

敏捷设计

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(一)设计的臭味

系统设计原则

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(二)单一责任原则

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(三)开放-封闭原则

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(四)里氏替换原则

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(五)依赖倒置原则

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(六)接口隔离原则

包设计原则

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(七)包的内聚性原则

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(八)包的耦合性原则

设计模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(一)COMMAND模式和ACTIVE OBJECT模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(二)TEMPLATE METHOD模式和STRATEGY模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(三)FACADE模式和MEDIATOR模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(四)SINGLETON模式和MONOSTATE模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(五)NULL OBJECT模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(六)FACTORY模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(七)COMPOSITE模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(九)ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(十)PROXY模式和STAIRWAY TO HEAVEN模式

敏捷软件开发 - 原则、模式与实践 —— 设计模式(十一)VISITOR模式

2020-01-06 20:41:23 feifeilb 阅读数 5
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第23章

COMPOSITE模式是一个非常简单但具有深刻内涵的模式。

图1

上图中展示了COMPOSITE模式的基本结构。图中是一个形状类层次结构。基类Shape有两个派生类:Circle和Square。第3个派生类时一个组合体。CompositeShape持有一个含有多个Shape实例的列表。当调用CompositeShape的draw()方法时,它就把这个方法委托给列表中的每一个Shape实例。

因此,对系统来说。一个CompositeShape实例就像是一个单一的Shape。可以把它传递给任何使用Shape的函数或者对象,并且它表现得就像是一个Shape。不过,实际上它只是一组Shape实例的代理。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

没有更多推荐了,返回首页