从Spring ioc中引申出的一句话是比较经典的:别来找我,在那等着,我会去找你。
被动模式,与这个概念很相近:别把东西给我,告诉我在哪能取到它。
被动模式可以理解为三种模式: 开发模式, 部署模式,云模式。
一. 开发模式
实际上在我们的代码开发中,就一直在使用这种开发模式,例如
class ClassB { InterfaceA ref = createInterfaceA(); }
使用create方法,而不是直接new。也就是说告诉了ClassB,在create方法中获得InterfaceA.
这是一个很简单的例子,受它直接影响的,是系统的扩展性。在一个可扩展(伸缩)的系统中,例如在Eclipse产品程序,或是基于可插拔模块的应用程序开发中,则是随处可见的被动应用模式,这样的系统,对于现有组成部分在开发过程中很容易解决,但是对于未知组成部分(扩展性),只能通过被动模式解决,例如Extwind,在基于osgi的web应用程序中,Dynamic IoC和Extension-Point所做的事。
二. 部署模式
目前web应用程序的部署,可以总结为这样一句话:需要部署的时候就来找我,别忘了把东西带上!
这与现在的服务理念完全相悖,快递公司都有上门取货这项服务。
如果以开发模式来看,这就属于 Deploy deploy = new FixedDeploy() ,而不是getDeploy()。
这是一种陈旧的部署模式,毫无扩展性和伸缩性,它让很多原本简单的事情变得很复杂,虽然这是一种部署模式,但是它将影响到后来的架构模式。
Extwind的部署模式:需要部署的时候,给我个电话,告诉我东西在哪,我去取。
这个“电话”就是一个部署描述符(Deploy Description),它描述了部署方式,应用程序或模块的存放地(Repository)等细节,Extwind通过这个描述符从指定的Repository中获取应用程序并部署。
如果以面向对象来看它,可以将这个描述符理解为一个interface,它将影响到部署模式的扩展性和伸缩性。
Extwind中的repository与maven中的repository很像,对于它的定义,主要有2个方面:
1. 组件库,这可以通过maven来帮助完成
2. 部署库,由应用程序生成的受支持的部署库,部署时,只需要将描述符指向该库或库中的某些组件。
三. 云模式
用一个例子来理解云模式:
新增一台386,可以为云增加1%的计算能力;
新增一个集群环境,可以为云增加20%的计算能力;
这里的计算能力就是一种资源,可以理解为服务能力。之前提到过,对于未知资源,只能通过被动模式来获取,Extwind将会通过云模式来提供可伸缩的服务环境。
Extwind要做的事情只有一件:让原本简单的事情,不要太复杂。
posted on 2009-07-02 15:24
Phrancol Yang 阅读(351)
评论(0) 编辑 收藏