论坛首页 入门技术论坛

关于类层之间的疑惑

浏览 9011 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-07-16  
diaobiyong 写道
neptune 写道
接口,我们大多数项目都有一个IDAO一个DAOImpl,一个IService一个ServiceImpl。不知有几个项目,一个IDao,真有多个接口实现。

如果不是什么特别的项目,还是直接就是DaoObject和ServiceObject,不要再做接口了,不然累死你。

至于说单实例,如果你是无状态的你就放心用了。

无状态用单例实现肯定性能要好是不?大致是一个什么概念,比如有千万级的并发量,这个同时调用,用new的话,内存空间就很恐怖了,是不是可以这么理解,而单例,这个并发没问题?



你能用一个单例完成事情,还非要new来new去做什么,new是需要成本的,同时gc也是需要成本的。
0 请登录后投票
   发表时间:2009-07-16  
我觉得说接口没用的人,大概就是没用从自动化测试,持续集成中尝到甜头的人。
0 请登录后投票
   发表时间:2009-07-16  
如果用new,可维护性不强,如果通过spring ioc,如果我想切换一个idao的实现,实现起来就方便了
0 请登录后投票
   发表时间:2009-07-16  
可以看看 《java与设计模式》 这本书....
   尤其前6章, 看完后会有很大收获...

从new一直到ioc, 基本目的是为了降低代码的耦合度, 争取达到的目的是(个人见解):
1. 一但代码写好就不需要对代码本身再做修改.
2. 任何一个模块代码的修改都不影响其他部分.
3. 将程序中的可变部分放到程序(代码)外部来处理.(在spring配置文件中替换具体实现要比修改代码来的简单)
0 请登录后投票
   发表时间:2009-07-16  
欢迎大家继续讨论。。。。
0 请登录后投票
   发表时间:2009-07-16  
为什么要用IoC?因为你根本new不出对象来

你有UserService,想new一个UserDao,问题是这个UserDao可能需要一个JdbcTemplate才能工作,这个时候你又要new一个JdbcTemplate,而JdbcTemplate又需要DataSource才能工作,这个时候你又需要先new一个DataSource,假定你自己写了一个DriverManagerDataSource,终于把这个UserDao给new出来了,而运行的时候DataSource是从服务器jndi查找的,怎么办?改代码

等到UserService可以运行了,你会发现另外一个问题,很多资源被你new出来了,还要负责释放,如何释放?在哪里释放?自己管理对象的代价就是随着对象增加复杂度成指数增长

最终你就无法维护所有的代码了,只好推倒重写一遍
1 请登录后投票
   发表时间:2009-07-16  
unsid 写道
我觉得说接口没用的人,大概就是没用从自动化测试,持续集成中尝到甜头的人。


自动化测试就一定需要接口,没有接口就不能自动化测试了。
0 请登录后投票
   发表时间:2009-07-16   最后修改:2009-07-16
个人偏解:将代码耦合变成了配置耦合,改配置比改代码方便,因为java是编译型的。
这种情况下,耦合一直存在,只是变了形式而已,所以真正解藕还是靠对象之间关系的设计来解决。
0 请登录后投票
   发表时间:2009-07-16  
接着讨论哈哈
0 请登录后投票
   发表时间:2009-07-16  
panhf2003 写道
xellos 写道
jakoes 写道
直接NEW就把各层耦合在一起了,不好


我知道你说的是对的。
我还想听听你说,这种耦合有什么关系?
我想听你实际体会,空想出来的我也会想,网上找来的我也会找,书上看来的我也会看。
我一直都为这个苦恼,没有切身体会,就无法提升自己的理解。



用new的话,是紧耦合,而且不利于测试,比如说你现在new了userservice,第一,现在如果想换一个实现userservice2,就需要改代码了,维护起来很麻烦,但是如果用ioc的就可以解决这个问题;第二,这样做不利于测试,因为无法插入一个测试模拟类,但是如果用ioc的话可以很方便的插入一个测试模拟类

你不改代码就要改配置文件,一样要改.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics