【发布时间】:2011-02-04 03:15:14
【问题描述】:
控制反转的优势在于它将对象与特定的查找机制和它所依赖的对象的实现分离。因此,生产应用程序和测试都获得了更大的灵活性。
实际上是什么意思?
【问题讨论】:
-
避免昂贵的类型转换的迂回方法,我们应该这样做
标签: dependency-injection ioc-container
控制反转的优势在于它将对象与特定的查找机制和它所依赖的对象的实现分离。因此,生产应用程序和测试都获得了更大的灵活性。
实际上是什么意思?
【问题讨论】:
标签: dependency-injection ioc-container
IoC 的一个很好的例子是数据库模拟。在编写应用程序时,您可能需要保留对象以供以后检索或使用。好吧,为了抽象出数据库,您可以使用如下方法创建一个接口:
Interface DbSaver
+void save( MyObject myObject )
+MyObject load( String id )
如果没有 IoC,你会得到这样的结果:
DbSaver saver = new DefaultDbSaver();
或者,您只需定义一个实现,并将其作为单例访问(最初似乎适用于数据库操作对象):
MyDbSaver saver = MyDbSaver.getInstance();
使用 IoC,您可以切换 DbSaver 的实现,甚至无需重新编译您的应用程序(至少 Spring 提供了这一点)。也就是说,在不更改任何代码的情况下,您可以选择使用一种实现而不是另一种。对于数据库访问对象,最常见的做法是创建一个将所有内容存储在内存中的默认实现。当您最终确定您的数据库设计、结构或技术时,您可以继续构建您的应用程序,而不必担心数据是如何被持久化的。您只需在界面内工作。
通过这种方式,业务对象与数据库集成分离,这具有允许两个部分并行开发的巨大好处。
【讨论】: