反对控制容器倒置的争论
|
似乎每个人都在向IoC容器迈进。我已经尝试了一段时间,尽管我不想成为一个在高速公路上走错路的司机,但它仍然没有通过测试我的常识。让我解释一下,如果我的论点有误,请更正/启发我:
我的理解:当组合不同的组件时,IoC容器应该使您的生活更轻松。通过a)构造函数注入,b)setter注入和c)接口注入来完成。然后以编程方式或在容器读取的文件中“连接”这些文件。然后按名称召唤组件,然后在需要时手动进行投射。
我不明白的是:
编辑:(更好的措词)
如果正确设计了组件(使用IoC模式,松散耦合),则可以用更清晰的方式“联结”应用程序,为什么要使用不符合该语言的不透明容器?此“托管代码”如何获得非平凡的功能? (我听说过一些有关生命周期管理的内容,但我不一定理解这比自己动手做得更好/更快。)
原版的:
当按名称调用组件时,为什么要花所有的时间将组件存储在容器中,以不习惯于该语言的方式“将它们连接起来”,使用等同于“ goto标签”的东西,然后通过不进行手工转换而失去了静态类型语言的许多安全优点,而如果不这样做,它们将获得等效的功能,而是使用现代OO语言提供的所有酷炫的抽象功能,例如编程接口?我的意思是,实际上需要使用手头组件的零件必须知道它们在任何情况下都在使用它,在这里,您将使用最自然,惯用的方式进行“接线” -编程!
没有找到相关结果
已邀请:
3 个回复
浅镁
社攻取墟槽
的实现,并将IoC配置为提供需要
的任何地方。此实现可以从数据库,XML文件,外部服务等获取它们。在哪里都没有关系。该控件已被反转。使用类型为“ 1”的对象的代码不在乎它们来自何处。 明显的好处是您可以随时替换该实现。您可以将其替换为测试版本,根据环境更改版本等。但是请记住,在任何给定时间,您也不需要接口与实现的比例为1:1。 例如,我曾经在上一份工作中使用过代码生成工具,将大量DAL代码吐入一个类中。拆分它会很麻烦,但是将其配置为以特定的方法/属性名称将其全部吐出来并不是什么麻烦。因此,我为存储库编写了一堆接口,并生成了一个实现所有接口的类。对于生成的类,这很丑陋。但是我的应用程序的其余部分不在乎,因为它将每个接口视为自己的类型。 IoC容器为每个容器都提供了相同的类。 这样我们就可以快速启动并运行,而没有人在等待DAL开发。当我们继续使用接口的域代码进行工作时,初级开发人员的任务是创建更好的实现。这些实现后来被交换了,一切都很好。 如前所述,这一切都可以在没有IoC容器框架的情况下完成。确实,模式本身很重要。
委婪绷冗诉