面向组件编程(COP)
COP比OOP更进一步。通常OOP将数据对象组织到实体中。这种方法具有很多优点。但是,OOP有一个大的限制:对象之间的相互依赖关系。去掉这个限制的一个好的想法就是组件。组件和一般对象之间的关键区别是组件是可以替代的。
任何使用Avalon原理开发的系统都可以称为基于组件设计(CBD)的。COP和CBD不是同一概念。CBD是指一个系统如何设计,而COP是指一个系统如何实现。
设计组件
编写一个组件的第一步就是决定如何使用它。如果你有一个可以在很多不同上下文环境中使用的强大组件,就可以经常被重用。这些上下文环境包括在命令行执行组件、作为子系统的一个部分,或作为Avalon的一个完整部分。
既然所有组件都是Avalon的一个部分,那么所要做的就是定义它们的接口(role)。为系统的其它部分标识和文档化契约是很重要的。我所指的契约是依存关系的顺序、什么是它在运行时所需要的,什么是它提供给系统其它部分的。
在开始阶段仔细计划是很重要的。因为你需要尽可能通用而又能精确表示它的角色的接口。
因为上下文环境可能是Avalon的一个部分,所以你必须注意按Avalon的方式使用这些组件。这意味着在地定义关系时,应该遵循Avalon的关系顺序。
在设计一个能在命令行运行的组件时,尽量从组件中分离main()函数。这是为了维护Avalon的passive API做的强制。按照前面的方式设计组件,你会使main()函数所要做的最小化。
遵循下面的习惯:拥有一个专门处理main()函数的对象,包括解析命令行参数和初始化组件。使用这种方式在每个上下文环境中使用组件,在debug时,会最小化需要查找的位置。