Design patterns 远程门面模式与门面模式

Design patterns 远程门面模式与门面模式,design-patterns,facade,Design Patterns,Facade,除了remotefacade模式的接口更粗粒度,调用此接口的客户端是远程的而不是本地的之外,这两种模式之间还有其他区别吗 谢谢您指的是像Java的RMI这样的远程接口吗?我认为这不是一个facade,而是一个proxy模式实现 远程服务器将所有呼叫(通过代理模式对用户隐藏)转发到另一台计算机。这向用户隐藏了工作不是在本地完成的事实 Facade模式通常将复杂的界面简化为更简单的版本(就像用不同的控制面板替换复杂的控制面板,只使用几个最常用的按钮)。如果您确实需要更复杂的版本,您仍然可以使用旧的更

除了
remotefacade模式的接口
更粗粒度,调用此接口的客户端是远程的而不是本地的之外,这两种模式之间还有其他区别吗


谢谢

您指的是像Java的RMI这样的
远程
接口吗?我认为这不是一个
facade
,而是一个
proxy
模式实现

远程服务器将所有呼叫(通过代理模式对用户隐藏)转发到另一台计算机。这向用户隐藏了工作不是在本地完成的事实

Facade
模式通常将复杂的界面简化为更简单的版本(就像用不同的控制面板替换复杂的控制面板,只使用几个最常用的按钮)。如果您确实需要更复杂的版本,您仍然可以使用旧的更复杂的控件

编辑 在您指出您指的是Marin Fowler的
远程门面之后,我将进一步解释:

福勒的
remotefacade
不仅仅是
Remote
+
Facade
模式。facade使用的简化背后还有一个额外的理由

而不仅仅是简化复杂的方法或从外观中删除未充分使用的方法
RemoteFacade
显式用于在“无定格”接口中组合几种常用方法,以减少延迟和网络流量

由于
远程
调用将通过网络进行(使用Java的RMI等),因此将方法调用转换为消息以通过网络进行传递需要大量开销。消息在网络上传输、返回消息、解组响应等都需要时间。还可能有安全层检查和拦截流量。所有这些都会增加调用远程方法的时间和精力


RemoteFacade
将几种常用方法组合成一条网络消息。因此,使用Fowler书中的示例,如果您有一个地址接口,它带有setCity()setZipcode()和setStreet()的单独setter。这将是通过网络进行的3次远程呼叫。相反,
RemoteFacade
将其转换为一个方法setAddress(street、city、zip),它只需要传递一条网络消息,因此调用所需的时间应该更少。

我指的是Fowlers的模式:,我认为它与Java的模式不同RMI@dkatzel所以按照现在的说法,,我应该为我的客户制作1个Web服务来更新City、ZipCode和Street,而不是为每个人制作3个Web服务。这就是它的意思吗?或者,对于客户端来说,它只是一个方便的对象,可以将细粒度的WebServices包装成粗粒度的方法,我不这么认为,因为它仍然会在3次网络调用中结束。