Codecampserver 中的 StaticFactory<T> 是众所周知的模式吗?
题
CodeCampServer 源代码包含一个通用的 静态工厂.
我猜测这是框架如何与依赖注入良好配合的机制的关键部分。
其子类使用 DefaultUnconfiguredState 为自己提供对默认未配置状态的静态访问,依赖项解析机制可以用工作内容替换该状态。
我找不到这方面的任何文档......
有没有好的解释 这本书?(我正在等待亚马逊发货......)
...或者其他人可以对这是什么以及我是否明智地采用这种模式提供一个很好的评论(如果是一个......)?
更新
自从 Jeffrey Palermo 回答了这个问题以来,我看到在 MVC2 in Action 的(正在进行中的)手稿中,使用用于定位存储库的工厂来讨论和说明这种模式/风格,以保持域层无知。持久性问题。(看 第23章).
默认情况下,使用此工厂会引发异常:
"了解如何创建 资源库不与 工厂这家工厂只是 代表返回 存储库"
该示例可以使用多种机制之一来初始化存储库接口的具体实现。在书中的示例中,为了简单起见,他们选择不使用 IOC 容器,并在某些启动逻辑中明确提供它。
"重要的是 核心项目和用户界面项目 应参考基础设施 项目或纯 基础设施性质。我们有 将 NHibernate 完全关闭到 侧,使其余 应用程序并不关心数据 访问正在发生"
关于这一新章节中示例代码的最后一点需要注意的是,工厂不再是静态的(至少就面向外部的接口而言)。
更新2
巴勒莫先生在博客上发表了更多关于 抽象工厂的这种特殊风格 (参见 OrderShipperFactory 的实现)。
我也可以 只需考虑“手动依赖注入” (鲍勃叔叔)。
更新 3 - 2016 年 3 月
有 另一个例子在这里, ,尽管 Jeffrey 明确表示这是演示代码,并且注释表明这将在 Mark Seeman 所谓的 成分根 (IE。在应用程序启动时)
我在杰弗里的文章中发现了这一点“洋葱架构:第 4 部分 - 四年后"
解决方案
好问题。我也不喜欢它。它确实应该命名为“StartupFactoryConfiguration”,但它在重构列表中。
我们尝试了这个想法,作为一种为不通过容器进行构造函数注入的地方设置 DI 的方法。
它会消失。我不知道反模式是什么(什么名字?),但 StaticFactory 会死掉。
现在,从今天早上起,它已更名。现在是 AbstractFactoryBase。它是抽象工厂模式的实现: http://en.wikipedia.org/wiki/Abstract_factory_pattern
工厂的实现最终会调用 IoC 容器,但它允许从代码中的某个位置进行访问,而无需对 IoC 容器程序集进行程序集引用。
谢谢、 杰弗里-巴勒莫
其他提示
任何静态的东西都是 DI 的敌人。
这个 StaticFactory 看起来像一个实现 服务定位器 (反)模式。
我认为服务定位器是一种反模式,因为它对于 API 的用户来说是完全不透明的,哪些依赖项需要就位;因此,人们可以轻松地在服务定位器将抛出异常的上下文中调用对象上的方法,而 API 绝对不会给您任何线索表明情况确实如此。
适当的 DI,例如大量使用 构造函数注入 是一个更好的选择。