【发布时间】:2013-12-11 18:44:14
【问题描述】:
除了Remote Facade pattern 的接口更粗粒度 并且调用此接口的客户端是远程 而不是本地之外,这两种模式之间还有其他区别吗?
谢谢
【问题讨论】:
除了Remote Facade pattern 的接口更粗粒度 并且调用此接口的客户端是远程 而不是本地之外,这两种模式之间还有其他区别吗?
谢谢
【问题讨论】:
你指的是像 Java 的 RMI 这样的Remote 接口吗?我不认为这是 facade 而是实际上是 proxy 模式实现。
Remote 将所有调用(通过代理模式对用户隐藏)转发到另一台机器。这向用户隐藏了工作不是在本地完成的事实。
Facade 模式通常将复杂的界面简化为更简化的版本(例如用不同的控制面板替换复杂的控制面板,其中只有几个最常用的按钮)。如果您确实需要更复杂的版本,您仍然可以使用旧的更复杂的控件。
编辑
在您指出您指的是 Marin Fowler 的Remote Facade 之后,我将进一步解释:
Fowler 的 Remote Facade 不仅仅是 Remote + Facade 模式。外观使用的简化背后还有一个额外的原因。
而不仅仅是简化复杂的方法或从外观中删除使用过的方法。 RemoteFacade 明确用于在“unfacaded”接口中组合几种常用方法,以减少延迟和网络流量。
由于Remote 调用将通过网络(使用Java 的RMI 等),因此将方法调用转换为通过网络传递的消息会产生大量开销。消息通过网络并获取消息并解组响应等需要时间。还可能有安全层检查和拦截流量。所有这些都增加了调用远程方法的时间和精力。
RemoteFacade 将几种常用方法组合成一条网络消息。因此,使用 Fowler 书中的示例,如果您有一个 Address 接口,其中 setCity() setZipcode()、setStreet() 具有单独的设置器。那将是通过网络进行 3 次远程调用。取而代之的是 RemoteFacade 将其转换为 1 个方法 setAddress(street, city, zip) 只需要传递 1 条网络消息,因此调用时间应该更少。
【讨论】: