博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页

2011年6月6日

摘要: 简介:团队设计是敏捷方法论中很重要的一项实践。我们这里说的团队,指的并不是复数的人。一群人就是一群人,并没有办法构成团队。要想成为团队,有很多的工作要做。我们之所以考虑以团队为单位来考虑架构设计,是因为软件开发本身就不是一件个人的事情,架构设计更是如此。单个人的思维不免有考虑欠妥之处,单个人的学识也不可能覆盖所有的学科。而组织有效的团队却能够弥补这些缺憾。Context谁来负责架构的设计?Problem在我们的印象中,总认为架构设计是那些所谓架构设计师的专属工作,他们往往拥有丰富的设计经验和相关的技能,他们不用编写代码,就能够设计出理论上尽善尽美的架构,配有精美的图例。问题1:理论上设计近乎完 阅读全文

posted @ 2011-06-06 20:18 李大嘴 阅读(294) 评论(0) 推荐(0) 编辑

摘要: 简介:XP非常强调简单的设计原则:能够用数组实现的功能决不用链表。在其它Agile方法中,简单的原则也被反复的强调。在这一章,我们就对简单性做一个全面的了解。Context架构应该设计到什么程度?Problem软件的架构都是非常的复杂的,带有大量的文档和图表。开发人员花在理解架构本身上的时间甚至超出了实现架构的时间。在前面的文章中,我们提到了一些反对象牙塔式架构的一个原因,而其中的一个原因就是象牙塔式架构的设计者往往在设计时参杂进过多的自身经验,而不是严格的按照需求来进行设计。在软件开发领域,最为常见的设计就是"Code and Fix"方式的设计,设计随着软件开发过程而增 阅读全文

posted @ 2011-06-06 20:18 李大嘴 阅读(206) 评论(0) 推荐(0) 编辑

摘要: 简介:通过上一章的介绍,我们对敏捷和方法有了一个大致的了解,从这一章起,我们开始对软件开发过程中架构设计的研究。记住一点,我们并不是为了架构设计而研究架构设计,我们的目的在于敏捷方法学的应用。架构设计是一种权衡(trade-off)。一个问题总是有多种的解决方案。而我们要确定唯一的架构设计的解决方案,就意味着我们要在不同的矛盾体之间做出一个权衡。我们在设计的过程总是可以看到很多的矛盾体:开放和整合,一致性和特殊化,稳定性和延展性等等。任何一对矛盾体都源于我们对软件的不同期望。可是,要满足我们希望软件稳定运行的要求,就必然会影响我们对软件易于扩展的期望。我们希望软件简单明了,却增加了我们设计的复 阅读全文

posted @ 2011-06-06 20:17 李大嘴 阅读(271) 评论(0) 推荐(0) 编辑

摘要: 简介:我们说,和重型方法偏重于计划、过程和中间产物不同,敏捷方法更加看重人和沟通。人和沟通永远是第一位的,而计划、过程和中间产物,那只是保证沟通、实现目标的手段。这并不是说计划、过程、中间产物不重要,只是不能够本末倒置 注:我们把中间产物定义为为了实现跨边界的沟通而制定的文档、模型、代码。例如设计文档、数据模型等。参考RUP的Artifact。 评判软件成功的标准有很多,对于敏捷方法论来说,成功的标准首先在于交付可用的软件。为了保证软件的可用性,最重要的就是做好需求。做好需求的方法有很多(参见拙作需求的实践),但这并不是我们讨论的主题。对于我们要开始的架构设计的工作来说,从需求出发来设计架构, 阅读全文

posted @ 2011-06-06 20:17 李大嘴 阅读(266) 评论(0) 推荐(0) 编辑

摘要: 简介:方法论对软件开发而言意味着什么?我们如何看待软件开发中的方法论?方法论能够成为软件开发的救命稻草吗?在读过此文后,这些疑惑就会得到解答。在第一篇文章中,我们来了解标题中的一些词的含义。方法学是什么? 敏捷是什么? 为什么讨论架构? 方法论方法论的英文为Methodology,词典中的解释为"A series of related methods or techniques"我们可以把它定义为软件开发(针对软件开发)的一整套方法、过程、规则、实践、技术。关于方法论的出现的问题,我很赞同Alistair Cockburn的一句话,"方法论源于恐惧。"出 阅读全文

posted @ 2011-06-06 20:16 李大嘴 阅读(410) 评论(0) 推荐(0) 编辑

2011年6月1日

摘要: 第4章描述了分类的重要性,以及经典的分类方法。而后就面向对象的分析与设计一般方法进行了描述:在分析时,关注的重点是分析面临的问题域,从问题域的词汇表中发现类和对象,实现对真实世界的建模。在设计时,我们在模型中发明一些抽象和机制,位要构建的解决方案提供设计。先看下Booch对面向对象分析和设计的经典论述:OOP:面向对象编程是一种实现方法,程序被组织成对象的协作集合,每一个对象代表某个类的实例,对象的类是通过继承关系联合在一起的类层次中的所以成员。OOD:面向对象设计是一种设计方法,它包含面向对象的分解过程,以及一种表示方法,用来描写设计中的系统的逻辑模型与物理模型,以及静态模型与动态模型。OO 阅读全文

posted @ 2011-06-01 11:11 李大嘴 阅读(500) 评论(0) 推荐(0) 编辑

2011年5月30日

摘要: 类类间关系在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。(1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能力,继承是类与类之间最常见的关系。类图中继承的表示方法是从子类拉出一条闭合的、单键头(或三角形)的实线指向基类。例如,图1给出了MFC中CObject类和菜单类CMenu的继承关系。 类的继承在C++中 阅读全文

posted @ 2011-05-30 16:26 李大嘴 阅读(637) 评论(0) 推荐(0) 编辑

2011年5月27日

摘要: 软件的复杂性是一个基本性质,而不是一个偶然性质。这种固有的复杂性是由4个因素造成的:问题领域的复杂性,管理开发过程的困难、软件可能的灵活性以及表征离散系统行为的困难。不限制复杂性将导致项目的推迟提交、走出预算以及无法满足所有需求等,这种情况通常称为软件危机。所有的复杂系统都具有5个属性:1)复杂性经常是以层次的形式表现出来,复杂系统是由相互关联的子系统组成,而这些子系统又是由它们各自的子系统构成,并由此类推到最低层的基本构件。--分层结构2)对系统中最基本的构件的选择是相对任意的,而且在很大程度上取决于系统观察者的判断力。--相对本元3)一般而言,各构件内的连接总要强于构件间的连接。在从构件的 阅读全文

posted @ 2011-05-27 10:55 李大嘴 阅读(686) 评论(0) 推荐(0) 编辑

2011年5月26日

摘要: RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。当我们讨论HDFS的,通信可能发生在: Client-NameNode之间,其中NameNode是服务器Client-DataNode之间,其中DataNode是服务器DataNode-NameNode之间,其中NameNode是服务器DataNode-DateNode之间,其中某一个DateNode是服务器,另一个是客户端如果我们考虑Hadoop 的Map/Reduce以后,这些系统间的通信就更复杂了。为了解决这些客户机/服务器之间的通信,Hadoop引入了一个RPC框架。该RPC框架利用 的Java的反射能 阅读全文

posted @ 2011-05-26 16:31 李大嘴 阅读(2790) 评论(0) 推荐(0) 编辑

2011年5月25日

摘要: 排序一直是数据结构中的常用算法,STL提供的排序算法非常丰富,如何有效使用就值得探讨。在网上没有找到条款31的翻译,于是我自己翻译了。--Winter如何进行排序?让我数数有几种方法。一旦程序员需对容器元素进行排序,sort算法马上就会出现在他的脑海(可能有些程序员会想到qsort,但详细阅读条款46后,他们会放弃使用qsort的想法,转而使用sort算法)。sort是一个非常优秀的算法,但并当你并不真正需要它的时候,其实就是一种浪费。有时你并不需要一个完整的排序(简称为全排序)。例如,你现有一个包含Widget对象(Widget意为“小挂件”)的vector容器,并且你想把其中质量最好的20 阅读全文

posted @ 2011-05-25 20:48 李大嘴 阅读(6302) 评论(2) 推荐(3) 编辑

上一页 1 ··· 3 4 5 6 7 8 9 10 下一页