角色是封装了状态与行为的对象,它们通过交换放入接收者信箱的消息实现两两之间的通讯。从某种意义上说,角色是最严格的面向对象编程,不过最好还是把它们当作人来看待:当用角色为一个方案建模时,想象有一群人,并给他们分配了任务,他们在一个组织结构中发挥职能作用,并想象如何做到故障升级(就像在不需要考虑实际利益的情况下与人打交道,也就是说我们不需要关心他们的情绪变化或道德问题)。这样的结果可以充当构建软件的心理脚手架。
注意:一个角色系统是一个会分配1…N个线程的重量级结构,因此为每个逻辑上的应用创建一个角色系统即可。
层次结构
就像在一个经济组织内,角色自然形成了层次结构。一个程序中监控特定功能的角色,可能想把自己的任务分解为更小,更容易管理的片段。基于这一目的,它启动了子角色,并管理它们。本节我们关注基本概念,更多细节在这里。惟一的前提是每个角色都有一个管理者,也就是它的创建者。
角色系统的典型特性是任务的拆分与委派,直到任务拆分的足够小。这样做,不只任务自己有清晰的结构,而且作为结果产生的角色也可以决定它们可以处理以及如何处理哪些消息,还有故障如何解决等等。如何一个角色遇到不能处理的情况,它会向管理者发送一条失败消息,去寻求帮助。这种递归结构允许在合适的级别处理故障。
将这种思想与分层的软件设计比较,后者更容易演变为防御性编程,以开发没有故障的软件为目标:程序如何与正确的对象(译者注:原文为person,但本人认为此处应该是指程序之间或模块之间的交互方式)交互;一个更好的方案是如何发现故障,而不是把一切“都藏在地毯下面”。
现在设计这样一个系统的困难之处在于如何决定谁应该