精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-09-14
我最近看了Spring的Ioc应用,发现他很像咱们使用的DAO的原理。比如一段IOC注入的代码: mydataSource myds; // mydataSource是一个 接口 public void setMydataSource(mydataSource ds);{ this.myds=ds; } 代码后面就可以使用 这个 myds接口了。但是以前我用DAO的时候也是这麽做的,下面是普通的DAO实现: mydataSource ds=DAOFactory.getInstance();.getMydataSource();; 这样就得到了一个 ds接口,后面就可以使用这个接口了。 这样的话IOC 和DAO模式有什麽区别? 文档上说 这样的好处是 如果以后要求换一种IOC Dao得实现,只需要配置文件中改一下 bean 就可以,但是 DAO同样可以做到啊!他可以在 web.xml中的这里: <env-entry> <env-entry-name>DAO/UserofficeDAO</env-entry-name> <env-entry-value>lyo.test.dao.service.UserofficeDAOImpl</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> 修改 dao得实现类,这样的话IOC注入的优势在哪里?! 和DAO模式一点区别都没有了!有感受得人讲解一下吧,多谢! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-09-14
DAO和IoC是没有什么关系的......
你的代码和IoC的方式区别在于: 一个是主动地从其他地方获取, DAOFactory.getInstance().getMydataSource(); 另外一个是被动地由其他东东注入, 一个万能的组装者(IoC Container)会调用setMydataSource()注入datasource 另, 乱发帖子, 怎么能够发在Web区, 斑竹大人, 踢飞吧...... |
|
返回顶楼 | |
发表时间:2004-09-14
lyo 写道 大家好:
我最近看了Spring的Ioc应用,发现他很像咱们使用的DAO的原理。比如一段IOC注入的代码: mydataSource myds; // mydataSource是一个 接口 public void setMydataSource(mydataSource ds);{ this.myds=ds; } 代码后面就可以使用 这个 myds接口了。但是以前我用DAO的时候也是这麽做的,下面是普通的DAO实现: mydataSource ds=DAOFactory.getInstance();.getMydataSource();; 这样就得到了一个 ds接口,后面就可以使用这个接口了。 这样的话IOC 和DAO模式有什麽区别? 文档上说 这样的好处是 如果以后要求换一种IOC Dao得实现,只需要配置文件中改一下 bean 就可以,但是 DAO同样可以做到啊!他可以在 web.xml中的这里: <env-entry> <env-entry-name>DAO/UserofficeDAO</env-entry-name> <env-entry-value>lyo.test.dao.service.UserofficeDAOImpl</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> 修改 dao得实现类,这样的话IOC注入的优势在哪里?! 和DAO模式一点区别都没有了!有感受得人讲解一下吧,多谢! 申明一点,这种用法不是DAO模式。DAO模式是一种数据访问模式而已,具体如何取得DAO接口,有很多种不同的实现方式。你的实现方式看起来很像IoC,或者说他根本就是。你也看到了IoC的好处了。 Spring是轻量级的,可以更为轻松的获得DAO对象。你的这种实现方式需要容器的支持,如果同样的应用切换到桌面应用,这些配置文件全都白费。Spring则基本不需多大改动。 |
|
返回顶楼 | |
发表时间:2004-09-14
lyo 写道 Spring是轻量级的,可以更为轻松的获得DAO对象。你的这种实现方式需要容器的支持,如果同样的应用切换到桌面应用,这些配置文件全都白费。Spring则基本不需多大改动。 我看 sun的 blue print上面就是这样使用 DAO模式的,包括他的JNDI查找,可能静态方法提供的有所差别。 你上面说得这个的确是优点,但是如果仅限在web中讨论的话,优点应该不止一两个吧,在J2EE环境下还有更突出的优点么? |
|
返回顶楼 | |
发表时间:2004-09-14
我的问法有问题,我并不是说DAO和IOC有联系,而是说我得这种用法和ioc区别在哪里。 在J2EE中用其他方法很难实现,而使用ioc可以解决的都有哪些
|
|
返回顶楼 | |
发表时间:2004-09-14
ioc的好处不在于配置文件.
实际上ioc和配置文件一点关系都没有! 虽然你可以用配置文件来配置ioc, 就象你也可以用配置文件来配置非ioc程序一样. ioc的好处在于你对外界没有依赖.你只依赖你需要的,绝不多一点点. 归根结底,你需要的就是一个datasource,而不是什么DAOFactory,对么? 你到饭店点菜, 想吃炒鸡蛋, 就直接点炒鸡蛋, 你不会希望人家递给你一个勺子炒锅和菜谱吧? 如果你用DAOFactory,那么你的代码就依赖于DAOFactory, 不管DAOFactory内部怎么变,你同时只能有一个实现. 而如果用ioc, 依赖性降低到最小, 灵活性就最大. 最简单的, 我可以动态决定给你传递的DataSource的instance. 比如: if(user input "a");{ new MyClient(new mydatasourceA(););; } else{ new MyClient(new mydatasourceB(););; } 这种逻辑你能写到DAOFactory中去吗? |
|
返回顶楼 | |
发表时间:2004-09-14
虽然Martin Fowler喜欢造词,但现在看来我不得不推荐学习IoC的人去看看他那篇关于“注入“的总结了。
http://www.martinfowler.com/articles/injection.html 看了这篇文章,你就统统明白了 |
|
返回顶楼 | |
发表时间:2004-09-14
ajoo 写道 ioc的好处不在于配置文件.
实际上ioc和配置文件一点关系都没有! 虽然你可以用配置文件来配置ioc, 就象你也可以用配置文件来配置非ioc程序一样. ioc的好处在于你对外界没有依赖.你只依赖你需要的,绝不多一点点. 归根结底,你需要的就是一个datasource,而不是什么DAOFactory,对么? 你到饭店点菜, 想吃炒鸡蛋, 就直接点炒鸡蛋, 你不会希望人家递给你一个勺子炒锅和菜谱吧? 如果你用DAOFactory,那么你的代码就依赖于DAOFactory, 不管DAOFactory内部怎么变,你同时只能有一个实现. 而如果用ioc, 依赖性降低到最小, 灵活性就最大. 最简单的, 我可以动态决定给你传递的DataSource的instance. 比如: if(user input "a");{ new MyClient(new mydatasourceA(););; } else{ new MyClient(new mydatasourceB(););; } 这种逻辑你能写到DAOFactory中去吗? 不知道你为什麽总是强调 “ioc和配置文件一点关系都没有”。不管你使用spring还是其他的framework,如果不写配置文件,简单的在类中使用 datasource ds; 程序根本运行不了,他连这个datasource的实现都不知道。 这样使用是因为在配置文件中配置了" <bean... ..>",这样系统才知道他的实现而加载他。程序运行的时候才知道 datasource这个接口是由谁来实现的。等于说他还是依赖配置文件的! |
|
返回顶楼 | |
发表时间:2004-09-14
lyo,ajoo强调得很对,配置文件是定义实际依赖关系的一种方法,pico就可以不用配置文件
应该从核心思想去理解问题而不局限于一种具体的实现方式 |
|
返回顶楼 | |
发表时间:2004-09-14
ajoo的:
如果用ioc, 依赖性降低到最小, 灵活性就最大 呵呵,8错 |
|
返回顶楼 | |