25

一点背景知识:我们正在构建一个用于处理科学模型的库/框架。我们有一个接口Model,它定义了模型必须实现的操作,这是非常小的。即:接口从模型实现者的角度Model定义了模型的契约。

该框架在模型周围添加了许多其他功能,但现在客户端代码必须通过使用一堆其他类来访问该功能,例如ModelInfoModelHostModelInstance等。

在我们使用这个框架的应用程序中,我们实际上不想处理所有这些运行模型的机制等。所以我们决定使用外观模式将框架功能包装在一个易于-使用对象。(我们已经将此模式应用到框架的其他部分,并取得了很好的成功。)

问题来了:既然我们已经有了一个 interface Model那么这个 façade 类的好名字是什么?Model接口是框架和模型实现之间 的契约,新类将定义框架和客户端应用程序之间的契约。

或者,更一般地说:当我们有一个库或框架提供的抽象时,我们如何命名抽象的“两侧”,以便清楚地识别抽象的“提供者”和“消费者”接口

(如果重要的话,对于这个项目,我们使用的是 Java 6。)

4

5 回答 5

16

我知道这看起来很陈词滥调,但是……您是否考虑过使用“ ModelFacade”作为外观类的类名?我认为使用表明接口已经命名的文档Model,它看起来相对简单,并且非常清楚您正在使用哪种设计模式。

于 2011-07-18T18:22:23.030 回答
2

*Provider 和 *Consumer 怎么样?我想你在你的问题中自己说的。也许*Producer 和*Consumer 更合适?

于 2011-07-18T18:25:37.530 回答
2

在我们团队内部的讨论中,提出了另一种选择:我们可以将现有Model接口重命名为其他名称,然后调用新的外观Model。事实上,它们Model现在都可以被调用,因为它们将存在于不同的包中。(虽然我不喜欢不同命名空间中的同名类。)

于 2011-07-18T19:22:13.780 回答
1

听起来 ModelInfo、ModelHost 和 ModelInstance 应该都是 Model 的成员。

请参阅https://softwareengineering.stackexchange.com/questions/316840/is-it-bad-practice-to-name-a-class-with-a-facade-suffix了解为什么您通常不应使用特定名称命名类使用的实现。基本上,有一天你可能想要使用不同的模型实现,它恰好不是一个门面。

于 2019-04-28T00:09:39.253 回答
0

PureMVC 使用一个名为的单例,并使用定义的ApplicationFacade方法注册所有模型registerProxyIFacade

于 2011-07-18T18:23:22.887 回答