所有工厂方法都应该公开吗?

ArS*_*SeN 1 design-patterns factory spryker

根据spryker/architecture-sniffer中的规则:

默认情况下,所有工厂方法都应该是公共的

这有什么好的论据吗?我以前在使用工厂模式时从未偶然发现过这一点。

Den*_*kov 5

该规则主要与Spryker SCOS Core开发相关。

Spryker OS的这一部分是基于PHP的电子商务框架。由于它是一个框架,它的目的是提供更好的定制和扩展能力。因此,关于工厂方法的开放可见性的严格规则支持用户完全控制每个模块中工厂中发生的依赖注入。

该规则对于以高度可定制性为目标的常见 OSS 库也很有用。它意味着对定制业务逻辑的“隐藏”的限制,并且需要工程师有意识地选择退出。在 Sprykers 的案例中,合作伙伴网络将使用这种方法来提供高度可定制的集成模块。

对于典型的 PHP 项目用例,此规则可能不太有用,甚至毫无用处,与项目开发的保护性质严重矛盾。

UPD:让我们举个例子。订单可以是一个包含多个依赖项的复杂对象,例如订单项。从一开始就可以访问所有部分,使项目更容易并增强可升级性:如果 Core 决定通过将可见性修饰符从 protected 切换为 public 来从外部访问工厂方法,则不会出现 BC 中断。因此,我们可以安全地定制工厂方法。