【发布时间】:2009-07-04 02:44:00
【问题描述】:
我是第一次在架构中引入 IoC 容器。我正在寻找一个不应该用 IoC 容器做的事情。我想避免使用 IoC 容器的陷阱。我不想滥用或过度使用它。
你能帮我列出使用 IoC 容器时要避免的事情吗?
到目前为止,我的清单上有一个项目:
- 不要让每个类都访问容器(不要将其设为公共 Singleton)。只有少数顶级类可以访问容器。
【问题讨论】:
我是第一次在架构中引入 IoC 容器。我正在寻找一个不应该用 IoC 容器做的事情。我想避免使用 IoC 容器的陷阱。我不想滥用或过度使用它。
你能帮我列出使用 IoC 容器时要避免的事情吗?
到目前为止,我的清单上有一个项目:
【问题讨论】:
也许这比您正在寻找的建议更简单,但我的建议是:不要挂在容器上。
IoC 是关于容器的 1%,关于内部组件的 99%。它们赋予了应用程序价值——另一方面,容器是基础设施垃圾;)
您应该能够以最有效的方式为您的应用程序设计这些组件。
如果您从看起来不错的容器开始,并且可以轻松创建封装良好、干净、自然且不严重依赖容器 API 的组件,那么您就走在了正确的轨道上。
但是,如果您发现自己为了将设计融入容器而费尽心思,并且您认为问题不在于您的设计,请立即找到一个没有影响您的限制的容器,然后继续前进前进。
希望这会有所帮助!
尼克
【讨论】:
如果您要建立 IoC,我建议您查看 http://docs.codehaus.org/display/YAN/IoC+Container
这里有几个有趣的点
- 最明显的一个,容器不应该需要业务对象 由它组装以实现任何 接口,继承任何类, 调用任何 API。这避免了直接 对容器的依赖。
容器不应要求业务对象符合任何 编码约定,例如“你有 公开公共构造函数”,“你 必须公开 Java Bean 设置器", “你必须有一个名为的方法 injectXXX", "你必须使用一个特殊的 注释”等。这样的限制 隐含依赖于 容器,因为程序员 业务对象仍然必须是 了解该做和不该做的事 容器。
不依赖任何 IoC 容器 API 在您的 IoC 对象中。这是一场悲剧 违反 IoC 原则 使用 IoC 容器。
- IoC 容器 用于装配对象的代码 一起;这是为了配置 系统的。毕竟不是 用于业务对象。
- 最好使用声明式 API。公开声明式 API 比公开需要过程编码的 API 更好。
【讨论】:
我想说不要使用配置文件来注册类型,除非你绝对必须这样做。它使重构变得困难,并且使用默认(非模拟)映射进行单元测试也变得更加困难。
【讨论】:
IoC 容器。
不,说真的;开始在没有 IoC 容器的情况下编写所有内容。一旦您掌握了 IoC 的工作原理并开始在您的代码中使用它,您就会开始看到容器可以提供帮助的领域。那是您应该添加容器的时候:当您准备好解决容器的实际问题时。不要仅仅因为有人说容器是好主意™而使用容器。
【讨论】: