面向服务的组件模型(Service-Oriented Component Model)
在Scala中,类的抽象与合成机制可以被视作面向服务的组件模型的基础。软件组件是一个个有明确定义的,提供特定服务的计算单元。一般而言,一个软件组件并不是完全自含的,也就是说它的实现依赖于其他一系列提供相应服务的组件。
在Scala中,软件组件即对应着类和trait,类和trait的具体成员相当于他们获得的服务,抽象成员相当于他们所需要的服务。组件的组合通过混入的方式来实现,从而使得开发者可以通过较小的组件来产生较大的组件。
Scala的基于混入的合成机制通过名称来识别服务,举例而言,一个抽象方法m,可以被任何一个定义了方法m的类C来实现,只需要将类C进行混入即可。Scala的组件合成机制通过这种方式将需要实现的服务与服务的提供者自动结合起来,再加上“类的具体成员总是覆盖抽象成员”这一规则,Scala就形成了一套递归的、插件式的组件机制,使得组件服务不需要显式进行组装。
上述机制可以简化大型的、存在大量递归依赖关系的组件之间的集成,并且能够有效保证(性能方面的)可扩展性,因为服务与调用者之间的结合是依靠编译器来推断的。这一机制与传统的黑盒式组件相比,最大好处是每个组件都是可扩展的实体:通过集成、重载而实现进化,并且可以对已有组件增加新服务或升级现有服务。总体来说,这些特性有效地支持了一种平滑的、渐进式的软件演进过程。