2009-07-04 47 views
4

我第一次在体系结构中引入了一个IoC容器。我正在寻找一个不应该用IoC容器做的。我想避免使用IoC容器的缺陷。我不想滥用或过度使用它。使用IoC容器时要避免什么?

你可以帮我列出一些东西,以避免使用IoC容器?

我有项目我的名单上至今:

  • 不要让每一个类访问容器(不让它公开辛格尔顿)。只有几个顶级的类应该访问容器。

回答

2

如果你必须制定一个IoC,我建议你看看http://docs.codehaus.org/display/YAN/IoC+Container

这里有一些有趣的点

  • 最明显的一个,容器不应要求业务对象 由它组装起来实现任何 接口,继承任何类,到 调用任何API。这可以避免对容器的依赖关系的直接 。
  • 容器不应要求业务对象符合任何 编码约定,如“你有 揭露公共构造”,“你 必须将Java Bean的制定者”, “你必须有一个方法名为像 injectXXX”,‘你必须使用一个特殊的 注释’等。这些限制 地方 容器上的隐含的依赖,因为 程序员业务对象还是要 知道该做的和从不要的 集装箱。

  • 不要依赖IoC对象中的任何IoC容器API 。使用IoC容器违反IoC原则 是一种悲剧 。

  • IoC容器 适用于汇编对象 在一起的代码;它用于系统的配置 。毕竟,这不是针对业务对象的 。
  • 声明API是更可取的。公开一个声明式API而不是需要程序化编码的API是很好的。
0

我会说不使用配置文件注册类型,除非你绝对必须。它使重构变得困难,并且使用默认(非模拟)映射进行单元测试也更加困难。

+0

嗨NotDan,为什么这会让单元测试更难以使用默认映射? – Sylvain 2009-07-08 21:26:51

+0

(至少使用.NET)您的测试项目的配置文件与应用程序配置文件(即MyApp.exe.config vs MyTest.exe.config)不同。由于您未使用实际使用的映射进行测试,因此您无法确定仅仅因为测试通过,您的应用将按预期运行。 – NotDan 2009-07-08 23:14:02

4

也许这是比那种你正在寻找咨询的更简单的,但我的建议是:不要挂了容器上。

IoC是关于容器的1%,关于内部的组件是99%。他们是什么让应用价值 - 在另一方面,容器是基础设施的垃圾;)

你应该能够在您的应用程序最有效的方式来设计这些组件。

如果你在开始时似乎是一个很好的容器,没有问题创造良好的包裹,干净,自然不严重依赖于容器API,那么你在正确的轨道上的组件。

但是,如果您发现自己跳过箍环以将您的设计装入容器中,并且您认为问题不在于您的设计,那么立即找到一个没有限制影响您的容器,并且保持向前移动。

希望这会有所帮助!

尼克