| EAA 模式目录 |

远程外观

在细粒度对象上提供粗粒度外观,以提高网络效率。

有关完整描述,请参阅 EAA 模式388

远程外观 在面向对象的模型中,使用具有小型方法的小型对象效果最佳。这为您提供了大量控制和替换行为的机会,并可以使用良好的意图揭示命名来使应用程序更易于理解。这种细粒度行为的结果之一是,对象之间通常存在大量交互,这种交互通常需要大量方法调用。

在单个地址空间内,细粒度交互效果很好,但在进程之间进行调用时,这种理想状态就不存在了。远程调用要昂贵得多,因为需要做更多的事情:数据可能需要被编组,可能需要检查安全性,数据包可能需要通过交换机路由。如果两个进程运行在全球两端的机器上,光速可能是一个因素。残酷的事实是,任何进程间调用都比进程内调用昂贵得多,即使这两个进程都在同一台机器上。即使对于相信延迟优化的信徒来说,这种性能影响也不能忽视。

因此,任何旨在用作远程对象的都需要一个粗粒度接口,以最大限度地减少完成某项工作所需的调用次数。这不仅影响您的方法调用,还影响您的对象。您不需要分别请求订单及其订单行,而是需要在单个调用中访问和更新订单和订单行。这会影响您的整个对象结构。您放弃了使用小型对象和小方法获得的清晰意图和细粒度控制。编程变得更加困难,您的生产力也会下降。

远程外观是 [四人帮] 在细粒度对象网络上的粗粒度外观。没有一个细粒度对象具有远程接口,并且远程外观不包含任何领域逻辑。远程外观所做的只是将粗粒度方法转换为底层的细粒度对象。