【发布时间】:2016-12-29 00:20:47
【问题描述】:
我问自己,外观模式是否违反了 SOLID 原则,以及该模式本身是否是反模式。
更新
我的意见:
- SRP 被违反,当你不只是直接调用方法,而是 诸如事务、日志记录、错误处理(我见过很多次)之类的东西。即使只是调用其他方法,我也有疑问。
OCP被违反了,因为你会在facade中添加更多的方法
LSP/ISP 被违反,因为消费者/客户端有依赖,将有太多的方法,客户端不需要。
DIP,在我看来,只要接口本身只公开抽象或 DTO,就不会违反。
SOLID 总体上是关于small、stable 以及因此composable 的接口。
门面往往是相反的大和不稳定。
【问题讨论】:
-
您的意思是所有 SOLID 原则??还是某个特定的?
-
我会说 SRP、Liskovk 和接口隔离。
-
总的来说,我自己可以看到违反 OCP。您可能会将 Facade 类称为违反 SRP。您的其余问题可能几乎是特定于实现的。您能否举个例子详细说明它违反这些原则的地方?还是您找到的特定实现的链接??
-
唯一正确的答案是“这取决于”,哦,
subjective -
@Rookian 刚刚看到您的编辑。在您看来,我认为对于 SRP 和 OCP,我在回答中也有同样的想法。 :) 一个补充是,每当您有新的要求添加到现有文件中时,您都必须违反 OCP,这不仅是“外观”特定的。但是对于 LSP/ISP,我不明白你的意思。客户端确实依赖于 Facade。这是否意味着它违反了 LSP/ISP ??
标签: design-patterns solid-principles facade