在以前的公司写的,现在离职了,感觉放在公司论坛有点浪费,现在看思想还挺新颖的。:)
养成"面向组件编程"习惯
首选让我们看看什么是面向组件编程:
面向组件编程
面向组件编程的缩写是COP。COP是对OOP的补充,帮助实现更加优秀的软件结构。组件的粒度可大可小,需要取决于具体的应用。
在COP中有几个重要的概念:服务,服务(Service)是一组接口,供客户端程序使用。例如,验证和授权服务,任务调度服务。服务是系统中各个部件相互调用的接口;组件,组件(Component)实现了一组服务,此外,组件必须符合容器订立的规范,例如,初始化,配置、销毁。
COP 是对一种组织代码的思路,尤其是服务和组件两个概念。在下文会提到Spring框架中,就采用了COP的思路,将系统看作一个个的组件,通过定义组件之间的协作关系(通过服务)来完成系统的构建。这样做的好处是能够隔离变化,合理的划分系统。而框架的意义就在于定义一个组织组件的方式。
理解组件
组件不是一个新的概念,Java中的javaBean规范和EJB规范都是典型的组件。组件的特点在于他定义了一种通用的处理方式。例如,JavaBean 拥有内视的特性,这样就可以通过工具来实现JavaBean的可视化。而EJB规范定义了企业服务中的一些特性,使得EJB容器能够为符合EJB规范的代码增添企业计算所需要的能力,例如事务、持久化、池等。
所以,组件比起对象来的进步就在于通用的规范的引入。通用规范往往能够为组件添加新的能力(就像上面所讨论的),但也给组件添加了限制,例如你需要实现EJB的一些接口。以下我们将讨论组件的一些相关问题:
组件的粒度
组件的粒度是和系统的架构息息相关的。组件的粒度确定了,系统的架构也就确定了。在小规模的软件中,可能组件的粒度很小,仅相当于普通的对象,但是对于大规模的系统来说,一个组件可能包括几十,甚至上百个对象。因此,对使用COP技术的系统来说,需要正确的定义组件的粒度。较好的定义粒度的方法是对核心流程进行分析。
--------------------------------------------------------------------------------------------------------------------------------------
我对面向组件编程的看法:
要提高代码的重用性和生命力,其中一个比较好的方案是把公用部分提取出来做成一个组件包.
比如一个开源的包,jxl.jar,javamail.jar,等等都是以不同粗细粒度的方式把用于特定方面的代码
进行了优化和设计组合而成的接口.他们定义了一组可扩展性的api,这些api不会局限于某个特定的
业务,比如我们说的某个项目,某个需求.
这些包通过对代码的不断改进来提升组件的功能和涉及面,从而版本越高,组件包越稳定.例如我们所了解
的struts.jar.可以认为它是一个控制层的组件包.
面向组件编程应该也是敏捷过程所要求的,通过良好设计的组件包,我们在开发的时候有几点优势.
1.组件包有实现时,在需求紧张的情况下我们不需要花过多的时间去考虑另一种方案.直接利用
组件包理的稳定的代码何乐而不为?
2.我们可以专注于业务的实现,而不需要考虑于业务无关的编码.
3.采用了稳定的组件包,增强了应用的稳定性和健壮性.
4.我们可以节约时间来学习更先进的技术.原始的技术因为已经得到了累计(通过组件包的方式).
5.采用组件编程,代码更少,但是功能更强,更稳定.
例如我提出的工具包组件:报表工具组件:就是采用了面向组件编程的方式,但是面向组件编程对代码的要求很高,需要大家一起来探讨和
共享(是不是也体现了敏捷过程中的要点?呵呵).