【问题标题】:What's a good name for a façade class?外观类的好名字是什么?
【发布时间】:2011-10-07 22:07:45
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: oop design-patterns naming-conventions facade


    【解决方案1】:

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

    【讨论】:

    • 同意——事实上,这是我现在在开发课程时使用的工作名称。但是从客户端应用程序的角度来看,到处创建和使用“ModelFacade”对象感觉很不雅。主要是想问这个问题,看看有没有其他好的选择。
    【解决方案2】:

    PureMVC 使用名为 ApplicationFacade 的单例,并使用 registerProxy 等方法注册所有模型,这些方法在 IFacade 中定义

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,我考虑过。但是FooProvider 似乎是一个构造或检索Foo 对象的类,而不是一个提供“foo”功能的类。此外,在我们的客户端应用程序中,我们已经在各处使用 Guice 的 Provider<T> 接口,因此引入一个新的、不同的“提供者”使用似乎是一个糟糕的设计。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-27
          • 1970-01-01
          • 1970-01-01
          • 2015-04-07
          • 1970-01-01
          相关资源
          最近更新 更多