0

中的每个方法Facade Object都是在几个接口中公开的其他几个方法的组合。随着时间的推移,这个对象也将增长,因为我们将了解通过组合复杂系统中可用的不同接口及其方法可以实现的不同操作。

我的问题很简单:

1) 继续使用 Facade 是一个更好的选择,还是我们有其他可用的选择?因为随着我们增加方法的数量来适应 Facade 对象中的每个新操作,它也变得复杂。我能想到的一个可能的解决方案是再创建一个 Facade

2)另外,当我们说它变得复杂时,外观是否有限制方法? Update我的分析表明,如果你的设计难以理解和重新思考,请停止向 Facade 添加更多方法is that it?

4

1 回答 1

3

由于您的问题非常抽象,因此很难以一种保证对您所写内容有好处的方式来回答它。

据我所知,你问的问题是真的,如果你有

interface A {  public void a(); }
interface B {  public void b(); }

class ABFacade {
   private final A a = ...
   private final B b = ...
   public void ab() {  a.a(); b.b(); }
}

那这有用还是没用?

答案将取决于

  • 问题域——它的定义如何?
  • 你如何命名事物——人们会理解吗?
  • 代码重用——是否有不止一件事需要调用外观方法?

我认为没有一个正确的答案——至少没有具体的例子。这还取决于使用这种模式的目的是什么——更好的代码重用?执行复杂操作的重复代码集更少?创建阻塞点 X 必须通过的所有代码?其他开发人员的清晰度?这个问题的答案会深刻地影响你的代码应该是什么样子。

我可以建议一些可能有助于产生有用的一般性的东西:

  • 如果一个门面方法只在一个地方使用,它可能不应该在门面中 - 如果代码只有一个客户端,那么内联执行所有步骤可能更有意义
  • 门面的一些操作能不能给出明确的命名?结果会比写出外观所做的一切更直观吗?如果是这样,那可能应该在门面上

最后,它只是一个模式。如果它能让您编写更小、更好或更可靠的软件,请使用它;如果没有,请不要打扰。

于 2013-10-14T07:01:27.467 回答