【问题标题】:Remote Facade pattern vs Facade pattern远程外观模式与外观模式
【发布时间】:2013-12-11 18:44:14
【问题描述】:

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

谢谢

【问题讨论】:

    标签: design-patterns facade


    【解决方案1】:

    你指的是像 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 条网络消息,因此调用时间应该更少。

    【讨论】:

    • 我指的是 Fowlers 的模式:martinfowler.com/eaaCatalog/remoteFacade.html,我认为它与 Java 的 RMI 不同
    • @dkatzel 因此,根据当前的语言,我应该为我的客户创建 1 个 WebService 来更新 City、ZipCode 和 Street,而不是分别创建 3 个 WebService。是这样翻译的吗?或者它只是一个方便的对象,让客户端将细粒度的 WebServices 包装成粗粒度的方法,我不认为因为它仍然会在 3 个网络调用中结束。
    猜你喜欢
    • 1970-01-01
    • 2018-11-01
    • 2013-02-06
    • 2018-04-15
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多