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

Design patterns 所有工厂方法都应该公开吗?,design-patterns,factory,spryker,Design Patterns,Factory,Spryker,根据《公约》的规定: 默认情况下,所有工厂方法都应该是公共的 这有什么好的理由吗?我以前在使用工厂模式时从未遇到过这种情况。看起来他们对“工厂”的定义只不过是一个特定类名的列表 一般来说,工厂没有理由必须是公共的。请注意,在实现方面存在很大差异,您可能会看到太阳下的每一种创造性模式都被称为“工厂”。这个词本身太宽泛了,几乎没有任何意义。看起来他们对“工厂”的定义只不过是一系列特定的类名 一般来说,工厂没有理由必须是公共的。请注意,在实现方面存在很大差异,您可能会看到太阳下的每一种创造性模式都

根据《公约》的规定:

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


这有什么好的理由吗?我以前在使用工厂模式时从未遇到过这种情况。

看起来他们对“工厂”的定义只不过是一个特定类名的列表


一般来说,工厂没有理由必须是公共的。请注意,在实现方面存在很大差异,您可能会看到太阳下的每一种创造性模式都被称为“工厂”。这个词本身太宽泛了,几乎没有任何意义。

看起来他们对“工厂”的定义只不过是一系列特定的类名


一般来说,工厂没有理由必须是公共的。请注意,在实现方面存在很大差异,您可能会看到太阳下的每一种创造性模式都被称为“工厂”。这个词本身太宽泛了,几乎没有任何意义。

这条规则主要与Spryker SCOS核心开发有关

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

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

对于典型的PHP项目用例,这个规则可能不太有用,甚至是无用的,这与项目开发的保护性质有着深刻的矛盾


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

此规则主要与Spryker SCOS核心开发相关

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

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

对于典型的PHP项目用例,这个规则可能不太有用,甚至是无用的,这与项目开发的保护性质有着深刻的矛盾


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

我不知道PHP,我可以说出我的观点,根据我的经验,在某些情况下,只需要使用某种方法来进行一些本地操作,例如在一个包中使用java,因此该方法可以是友好的(仅在包中可见)。或者在C++中可以得到保护。我认为答案取决于语言,也取决于你工厂的用例。问题是,这条规则检查所有工厂方法都应该是公共的,我不知道为什么它们应该是公共的(独立于语言)。我同意你的观点,我不认为所有方法都需要是公共的,但是如果我理解得很好,链接到它的存储库是一个框架,有一些内部规则。我不知道为什么,我也不认为从一般的角度来看是必要的。我不知道PHP,我可以说出我的观点,我的经验,我有一些情况下,一些方法只需要进行一些本地操作,例如在一个包中的java,所以该方法可以是友好的(仅在包中可见)。或者在C++中可以得到保护。我认为答案取决于语言,也取决于你工厂的用例。问题是,这条规则检查所有工厂方法都应该是公共的,我不知道为什么它们应该是公共的(独立于语言)。我同意你的观点,我不认为所有方法都需要是公共的,但是如果我理解得很好,链接到它的存储库是一个框架,有一些内部规则。我不知道为什么,我也不认为从一般的角度来看这是必要的。嗯,但是,如果所有方法都是公共的,那么它是如何更加可定制的呢?我不太明白那一点。我的观点是,如果这条规则至少允许使用受保护的方法,它不会让情况变得更糟。工厂是通用基础设施的一部分,在许多地方都可以使用(例如外观、客户机、控制器)。将它们公开可以确保所有工厂方法都在那里可用。在一天结束的时候,工厂的方法只能在外部使用,而不仅仅是在内部。在构建复杂模型时,包括多个实体的创建允许独立使用粒子(例如,订单可以包括订单项,独立使用订单项的开放工厂方法对于项目来说是一个有用的功能,即使在核心中没有这样使用)。嗯,如何通过使用所有的