- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
敏捷的架构设计
敏捷的架构设计-Code is Design ? 敏捷开发对软件架构设计产生了一定的影响,让人产生敏捷开发中“轻架构设计”的印象。?-- 迅网科技?文章就笔者经验,和大家一起讨论一下敏捷中的架构设计这个话题。?-- 迅网科技?
??? 首先,笔者认为敏捷开发是一种软件过程方法和工具,敏捷开发本身并不能代表架构设计。?-- 迅网科技?这就好比建筑架构设计和建筑工程管理之间的差别一样,两者是建筑的两个方面。?-- 迅网科技?相同的软件行业也是类似的情况,软件架构设计描述的是事物本身,而敏捷开发描述的是创建这个事物的过程。?-- 迅网科技?所以敏捷开发和架构是没有直接替代关系的两个范畴。?-- 迅网科技?
??? 但敏捷开发后,架构设计(内容和形式上)还是有了一定程度的变化。?-- 迅网科技?
????1. 敏捷开发中架构设计的方式
??? 这里的架构设计方式,指什么时候进行架构设计,并以什么样的方式进行架构设计,如Iteration中新需求引入时,重构的方式,Code is Design的方式等。?-- 迅网科技?
??? 下图描述了敏捷开发前和后架构方式:
??? 上图中,敏捷开发后软件架构设计的方式产生了变化:敏捷开发把原先软件过程前期的架构设计,分散到了整个敏捷开发软件过程中。?-- 迅网科技?
??? 看到敏捷开发中分散化的架构设计,想起公司财务中的马克威茨资产组合理论,用马克威茨这个诺贝尔大师的理论来解释敏捷开发中的分散架构形式,却也行得通。?-- 迅网科技?
??? “马克威茨资产组合理论”中说道:可以通过分散投资使收益率不变而方差(风险)减少。?-- 迅网科技?通俗一点讲也就是不要把鸡蛋放在一个篮子里。?-- 迅网科技?资产组合分散化后,可以做到收益率不变的情况下,风险减少。?-- 迅网科技?
??? 这里的风险指的是波动,也就是方差。?-- 迅网科技?这和软件工程中的风险有异曲同工之意,即软件工程中的风险指:需求的波动,数学化后就是需求的方差。?-- 迅网科技?然后可以按照统计定理推论出,把架构设计组合化,并分散化,有益于收益率不变的情况下,减少软件风险。?-- 迅网科技?(中间的推导过程省略,有兴趣的朋友参考相应文献)。?-- 迅网科技?
??? 如果按照资产组合理论,下面这些就是软件架构设计中的组合,把一次性软件过程前期30%(甚至更多)的架构设计,换成如下的软件架构组合:
??? (1)引入新需求后的架构。?-- 迅网科技?每个Iteration中,新需求引入前,都可以进行构思和架构。?-- 迅网科技?
??? (2)重构产生架构。?-- 迅网科技?先让软件运行,再重构其代码。?-- 迅网科技?那么软件的架构随着重构自然而然的在软件过程中产生。?-- 迅网科技?
??? (3)开发过程中的设计:以前是设计完后开发,现在是边设计边开发。?-- 迅网科技?
??? (4)其他
??? 所以敏捷开发不是轻架构设计,而是依然注重架构设计。?-- 迅网科技?只不过架构的方式变化了,变得更加有效且风险更小。?-- 迅网科技????2. 敏捷开发中架构设计的内容
??? 传统的架构设计,包括架构和设计两个方面、其中设计可以包含详细设计,如详细的UML图(详细的类图,顺序图等),详细的API设计以及接口描述,存储层数据库表字段设计等等。?-- 迅网科技?
??? 出于下面两个方面的考虑,敏捷开发不适合这种架构设计内容:
??? (1)在当今的快速变化的社会中,业务需求和技术也都快速变化着,在软件过程前期花费30%(甚至更多)的时间进行架构设计,要么开发出来的软件不符合市场需求,要么就是一旦需求变动,造成较大的改动成本。?-- 迅网科技?如,作者了解的一个电子商务产品,当前所做的功能都是两年前规划设计的,而且如有新需求发生,需要下个版本才会采纳,导致整个产品脱离市场和客户的需求。?-- 迅网科技?
??? (2)架构设计包含两个方面,一是:架构,二是:设计。?-- 迅网科技?其中设计中的详细设计需要大量的时间,包含详细的流程,API,数据结构等设计。?-- 迅网科技?但软件开发阶段的Code编码阶段,同样蕴含了很多详细设计的内容,所以二者之间存在着Repeat Yourself的情况。?-- 迅网科技?换句话说,现在敏捷开发提倡Code is design,而以前是Design is code。?-- 迅网科技?但问题是,软件开发人员维护一套Design,外加一套Code,不堪重负,效率低。?-- 迅网科技?所以,现在是Code is Design盛行,敏捷盛行。?-- 迅网科技?
??? 基于这两种原因,敏捷中将传统的架构设计分成:架构 + 设计:
??? (1)敏捷开发的架构保
文档评论(0)