【问题标题】:Facade design pattern usage外观设计模式的使用
【发布时间】:2012-08-12 10:49:18
【问题描述】:

在我们的应用程序(C#)中,外观被用作核心的 API - 外观将被应用程序本身用来与核心做一些事情。知道了,下面是我的问题:

  1. 假设我的一个核心对象,它的外观包装,有一个递归位?例如,facade 提供了来自树的“GetX”,每个节点都需要从其子树中 GetX。该节点是否应该使用外观的“GetX”?
  2. 外观是否应该向应用程序公开核心对象?例如,用户想要构建一棵树、添加节点、打印树、计算树等。应用程序应该使用树对象还是应该请求外观创建、保存、打印等等?李>

谢谢。

【问题讨论】:

    标签: c# design-patterns facade


    【解决方案1】:

    Facade 是一个对象,它为更大的对象提供简化的接口 代码体。

    因此,请保持简单。

    1. 没有。将 Facade 封装在自身内部。我假设您有一个用于检索树的私有实现,在内部使用它,仅公开返回填充对象的公共方法(参见第 2 点)。

    2. 没有。立面应该做所有事情,否则创建它几乎没有意义。您可能希望创建一个可以在外观方法中使用的 DTO,但您不应该公开核心对象。

    【讨论】:

    • 2. HeadFirst 提到外观简化了,但仍然让用户可以访问内部细节。如果我必须在外观上做所有事情,我不会得到类似 C 的代码吗?例如:创建树、添加节点、获取树打印、将树转换为 XML 等?如果我无论如何都要公开树(通过创建它),用户不应该能够使用它的功能吗?
    • 好吧。如果您想访问详细信息,您可能不需要外观。
    • 只是引用。我在想我们应该包装我们的核心,这样它就不会与我们的应用程序层耦合(我们可能也必须将该核心提供给其他应用程序)。我的想法是我们应该有一些 API 来提供诸如“获取树”之类的功能,并返回应用程序可以使用的树。你能解释一下这个概念有什么问题吗?
    【解决方案2】:

    外观通常包裹您的核心并提供对一组特定功能的访问权限。

    1. 您可能希望这样做以保持一致性,但如果有另一种更简单的方法来保留外观提供的抽象,那就更好了。

    2. 你的核心代码都不应该被暴露(这会违背外观的目的)如果你想添加一些功能,那么在你的外观中添加一个函数,它将调用外观中的核心函数.

    【讨论】:

      【解决方案3】:

      关于问题 1: 正如其他人所说;否。相反,请考虑为此操作使用单独的接口(@98​​7654321@ 可能适用于此?),并首先通过 Facade 访问该接口上的操作。通过递归,内部接口可以直接再次使用。这可能会提供一些关注点分离,同时也可以在必要时更容易地在以后更改实现。

      在我看来,递归本身就是一个实现细节,而不是外观需要知道的任何事情。类似地,外观是实现算法不需要知道的东西(即,不要通过外观重复出现)。

      关于问题 2:如何也为此定义接口?例如。 ITreeITreeNode 等,并包含在 Facade 上的操作以使用这些操作。现在让实现实现这些接口,从而在外观之外提供所需的对象,而不会暴露核心对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多