0

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

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

谢谢。

4

3 回答 3

1

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

因此,保持简单。

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

  2. 不,外观应该做所有事情,否则创建它就没有什么意义了。您可能想要创建一个可以在外观方法中使用的 DTO,但您不应该公开核心对象。

于 2012-08-16T05:38:22.080 回答
1

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

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

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

于 2012-08-16T11:01:12.433 回答
0

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

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

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

于 2012-08-16T05:40:01.647 回答