3

CodeCampServer 源代码包含一个通用的StaticFactory

我推测这是框架如何与依赖注入良好配合的机制的关键部分。

其子类使用它的 DefaultUnconfiguredState 来提供对它们自己的默认未配置状态的静态访问,依赖解决机制可以用工作的东西代替它。

我找不到任何有关此的文档...

上有很好的解释吗?(我正在等待亚马逊的送货......)

...或者其他人可以提供一个很好的评论这是什么以及我是否明智地采用这种模式(如果它是一个......)?

更新

由于 Jeffrey Palermo 回答了这个问题,我看到在 MVC2 in Action 的(正在进行的)手稿中,使用用于定位存储库以保持域层无知的工厂讨论和说明了这种模式/风格持久性问题。(见第 23 章)。

默认情况下,使用此工厂会引发异常:

“如何创建存储库的知识不属于工厂。这个工厂仅代表返回存储库的能力”

该示例可以使用几种机制之一来初始化存储库接口的具体实现。在书中的示例中,为了简单起见,他们选择不使用 IOC 容器,并在某些启动逻辑中明确提供它。

“重要的是,核心项目和 UI 项目都不应引用基础设施项目或本质上纯粹是基础设施的库。我们将 NHibernate 完全放在一边,这样应用程序的其余部分就不会关心数据访问正在发生”

关于这一新章节中示例代码的最后一点要注意的是,工厂不再是静态的(至少就面向外部的接口而言不是)。

更新 2

巴勒莫先生在博客上写了更多关于这种特殊风格的抽象工厂(参见 OrderShipperFactory 的实现)。

我也可以考虑“手动依赖注入”(鲍勃叔叔)。

更新 3 - 2016 年 3 月

这里还有另一个例子,尽管 Jeffrey 明确表示这是演示代码,并且注释表明这将在 Mark Seeman 所称的组合根中进行配置(即在应用程序启动时)

我在 Jeffrey 的文章“洋葱架构:第 4 部分 - 四年后”中发现了这一点

4

2 回答 2

7

好问题。我也不喜欢。它确实应该被命名为“StartupFactoryConfiguration”,但它在重构列表中。

我们将这个想法作为一种为未通过容器进行构造函数注入的地方设置 DI 的方法。

它会消失。我不知道反模式是什么(什么名字?),但 StaticFactory 会死。


现在它已从今天早上起重新命名。现在是 AbstractFactoryBase。它是抽象工厂模式的实现:http ://en.wikipedia.org/wiki/Abstract_factory_pattern

工厂的实现最终会调用 IoC 容器,但它允许从代码中的某个位置访问,而无需对 IoC 容器程序集的程序集引用。

问候,杰弗里·巴勒莫

于 2009-12-17T14:32:40.773 回答
5

任何静态的东西都是 DI 的敌人。

这个 StaticFactory 看起来像服务定位器(反)模式的实现。

我认为 Service Locator 是一种反模式,因为它对 API 的用户完全不透明,哪些依赖项需要到位;因此,可以轻松地在服务定位器抛出的上下文中调用对象上的方法,而 API 绝对不会让您知道情况是否如此。

适当的 DI,例如大量使用构造函数注入是一个更好的选择。

于 2009-12-17T09:12:36.047 回答