编程设计模式:外观与否?

时间:2010-12-10 16:44:32

标签: design-patterns facade

我们团队中的另一个人为我的网络框架提供了一个库作为jar。让我们称这个框架为“我朋友的框架”。

我需要从他的框架中获得一个特定的类。该类暴露的一半属性是我自己应用程序所需要的。另一半不需要。要检索此类的属性,您需要执行一些String操作。由于我将在这个类的基础上开发我自己的框架,我想尽可能地分离依赖。也许将来我的另一位朋友会开发出更好的框架。

所以我做的是为该类生成了一个Facade类。我自己的框架通过我的facade类访问属性。如果“我的朋友的框架”确实改变了,我只需改变一个门面类,其余的保持不变。此外,String操作在facade类中完成。此外,facade类仅公开所需的属性。所以我自己的框架只是作为普通的getter / setter访问属性。

然而,我和这个家伙有争执。他迫使我直接使用他的班级,因为他首先不会改变他班级的实施。所以他告诉我,写一个门面课真的没有价值。但我不同意。

我错了吗?我相信我是对的。

3 个答案:

答案 0 :(得分:10)

原则上你没错。

你错了,你所做的不是门面。 Facade更常用于您拥有带有一堆服务的API的情况。您可以将所有这些服务一起使用,但这可能会变得复杂。该模式是站立一个API接口,即Facade,它将服务调用协调为可用的逻辑操作。

您正在做的更像是适配器模式。您正在通过在其前面放置另一个类来使他的类适应您的用例。

注意,我只是指出一个语义问题,在实践中你所做的是一个很好的设计实践。

另请注意,如果您真的不打算将来更新,那么您可能不需要经历麻烦。也许YAGNI - 你不需要它。

答案 1 :(得分:1)

对我来说听起来不错。

Facades通常为更大的类子系统提供接口,但我不明白为什么你也不能使用Facade来访问一个复杂的类。

听起来其他人可能很顽固 - 所以我认为从他的框架中脱离是好的。

如果您的外观更容易使用,也许您可​​以让他将其添加到他的框架中以便将其提供给其他人。

答案 2 :(得分:1)

你的方法听起来不错。

只需确保创建一个非常独立于WHOLE框架实际实现的接口。其他一些人已经指出这是一个适配器,只是因为你试图解耦一个类,但我怀疑这个类与其他类耦合。

尝试回答这个问题:这个门面隐藏着什么秘密? 尝试发布一些您想要公开的方法,以便我们讨论。