敏捷与结构性模块化(一) 探讨结构性模块化和敏捷之间的关系

1 简介

敏捷开发方法论日益流行,然而大多数“敏捷”专家和分析师都在孤立地讨论敏捷,也就是说忽视了系统“结构”(Kirk Knoernschild是一个例外,他编写了一本名为《Java Application Architecture》的图书阐述这一理念)。考虑到“敏捷”是基础实体的一个重要特性或属性,那么,这种疏忽令人感到很惊讶。一个实体要具有“敏捷”的特性,它必须具有高度的结构性模块化(structural modularity)特征(参见Scott Page的《Diversity & Complexity》)。

也许正因为这种疏忽,许多组织在敏捷开发流程方面进行投入但忽略了应用程序的结构。除了“如何实现一个敏捷的系统?”这个问题以外, 有人肯定还会问, “如何构建一个在结构上具备高度模块化的系统?”

这个系列的文章将从探讨结构性模块化和敏捷之间的关系开始。

2 结构、模块化与敏捷

业务主管和应用开发人员经常面临相同的挑战。无论是商业领域还是服务于商业的软件,它都必须在成本范围内构建和维护。如果要保持实体的持续运营,就必须能够以低成本的方式快速响应难以预料的变化。

如果我们希望高效地管理一个系统,就必须先理解该系统。只有理解了系统,可控制的变更和定向升级才能成为可能。

当然,我们并不需要理解系统的每个组成部分的详细情况和特性,只需要理解所负责的系统的相关参数以及相应等级层次的行为即可。

 

隐藏服务实现

从外部角度来看,我们仅仅关心系统暴露的行为、提供的服务类型以及该服务的属性。例如,服务可靠吗?与替代方案相比有竞争力吗?

图1:服务的使用者

作为服务的使用者,我们并不关心服务的特性是如何实现的,我们只关心所提供的功能(Capability)是否可以满足我们的需求(Requirement)。

理解结构以便管理

不同于使用者,服务的实现方式对于服务的提供者而言,是极为重要的。为了更好的理解,我们为负责提供服务的系统建立概念模型,这是通过将系统分解成一组更小的相互关联的单元实现的。如果这个实体是某个公司,这张组件图就代表了“组织结构图(Organization Chart’)”;如果这个实体是软件应用程序,那么这张图就是模块间依赖关系的映射图。

尝试理解抽象系统的第一步如下图所示。

图2: 服务提供者和系统维护者

时间: 2024-09-20 11:15:58

敏捷与结构性模块化(一) 探讨结构性模块化和敏捷之间的关系的相关文章

模块化Java:动态模块化

在前一篇文章<模块化Java:静态模块化>中,我们讨论了如何构建Java模 块并将其作为一个单独的JAR进行部署.文中的例子给出了一个client和一个 server bundle(两者在同一个VM中),client通过工厂方法找到server.在该 例子中,工厂实例化了一个已知类,当然也可以使用反射来获取一个服务实现: Spring就是大量运用这种技术把spring对象绑定在一起的. 在我们讨论动态服务之前,有必要回顾一下类路径,因为标准Java代码和模 块化Java代码的区别之一就是依赖在

海尔模块化电视以及OSIF标准实际上就扮演着关系加速器的角色

"资源不更新,软件不升级,2年前买的智能电视现在变成普通电视了,未来会不会出现按照自己需要定制的功能模块,更换模块后电视就能实现升级."如今,网友们对未来电视的畅想已经变成了现实.3月18日,海尔在家博会上发布的基于OSIF标准的模块化电视可以让用户享受到这样的体验.据海尔电视相关负责人介绍,模块化电视将于3月26日开始预售.通过对用户需求进行深入调研,海尔根据用户需求推出了不同的模块,用户可以根据自己的需求定制差异化的产品功能模块,真正实现用户自主定制电视.据该负责人介绍,海尔模块化

探讨网站权重与关键字权重之间的关系

探讨:网站权重与关键字权重之间的关系,我们知道对于一个网站而言,其关键字可以是几个,十几个,也或者是几十个,甚至上百个,网站的规模似乎也就决定了网站关键字的数量多少,一般对于一个企业站而言,其会有3~5个目标关键词,除了这些目标关键词之外,剩下的就是一定数量的长尾关键词. 下面我们来看看关键字排名是如何进行的:一般网站相关优化流程是,先选择目标关键词来做,对一部分目标关键词进行站内文章,站外外链等,通常需要做哪一个关键词就会对某一个关键词进行优化,从这种意义上来讲,其目的就是提高此关键词在整个网

模块化Java:静态模块化

模块化是大型Java系统的一个重要特征.在这些项目中构建脚本和项目通常被划分为 多个模块,以便改进构建过程,但是在运行时却很少考虑划分模块的问题. 在"模块化Java"系列文章的第二篇里,我们将讨论静态模块化(static modularity ).内容包括如何创建bundle.将其安装到OSG引擎以及怎样建立bundle之间的版本依赖 .在下一篇文章中,我们将讨论动态模块化(dynamic modularity)并展示bundle如何对 其他bundle作出响应. 在上篇文章<

ECMAScript 6支持原生态模块化,ECMAScript 6模块化概述

在2014年7月底,TC39的另外一个会议,敲定了关于 ECMAScript 6 模块化语法的最后一些细节.本文完整的概述了关于 ES6 模块系统. 1. 当前 JavaScript 的模块系统. JavaScript 目前没有内置方法来支持模块化,不过社区创造了非常不错的变通方案.两个重要的(可惜相互不兼容)标准是: 1. CommonJS 模块化:该标准主要被使用在 Node.js 中(Node.js 模块化中有一些超出 CommonJS 的语法的特性).     特点:语法简洁,为同步加载

敏捷开发下平衡质量和进度

敏捷软件开发团队必须确保他们开发出来的产品质量能够满足要求,管理团队也经常希望开发团队能够提高速度以实现为客户提供更多的功能.本篇文章中多个作者探讨了质量和速度之间的关系,并提出了一些既能提高质量也能加快进度的方法. Bob Galen曾今在他的博客中发表了读懂我的唇语-敏捷并不快速的文章,在其中写到了追求软件开发进度下质量的重要性. 敏捷是一个"质量游戏",如果你以正直,承诺以及平衡的心态来玩这个游戏的话,那么结果将会是非常好的"速度游戏",但它(速度)却并非没有

ASP.Net Web Page深入探讨

asp.net|web 一.服务器脚本基础介绍 首先,我们先复习一下Web服务器页面的基本执行方式: 1. 客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端 2. 服务器接收到请求之后,发给相应的服务器端页面(也就是脚本)来执行,脚本产生客户端的响应,发送回客户端 3. 客户端浏览器接收到服务器传回的响应,对Html进行解析,将图形化的网页呈现在用户面前 对于服务器和客户端的交互,通常通过下面几种主要方式: 1. Form:这是最主要的方式,标准化的控件来获取用户的输入,Form的提交将数

ASP.NET Web Page应用深入探讨

asp.net|web 一.服务器脚本基础介绍 首先,我们先复习一下Web服务器页面的基本执行方式: 1.客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端 2.服务器接收到请求之后,发给相应的服务器端页面(也就是脚本)来执行,脚本产生客户端的响应,发送回客户端 3.客户端浏览器接收到服务器传回的响应,对Html进行解析,将图形化的网页呈现在用户面前 对于服务器和客户端的交互,通常通过下面几种主要方式: 1.Form:这是最主要的方式,标准化的控件来获取用户的输入,Form的提交将数据发送给

ASP.NET Web Page应用深入探讨第1/2页_实用技巧

一.服务器脚本基础介绍 首先,我们先复习一下Web服务器页面的基本执行方式: 1.客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端 2.服务器接收到请求之后,发给相应的服务器端页面(也就是脚本)来执行,脚本产生客户端的响应,发送回客户端 3.客户端浏览器接收到服务器传回的响应,对Html进行解析,将图形化的网页呈现在用户面前 对于服务器和客户端的交互,通常通过下面几种主要方式: 1.Form:这是最主要的方式,标准化的控件来获取用户的输入,Form的提交将数据发送给服务器端处理 2.Que