锁定老帖子 主题:关于类层之间的疑惑
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-16
diaobiyong 写道 neptune 写道 接口,我们大多数项目都有一个IDAO一个DAOImpl,一个IService一个ServiceImpl。不知有几个项目,一个IDao,真有多个接口实现。
如果不是什么特别的项目,还是直接就是DaoObject和ServiceObject,不要再做接口了,不然累死你。 至于说单实例,如果你是无状态的你就放心用了。 无状态用单例实现肯定性能要好是不?大致是一个什么概念,比如有千万级的并发量,这个同时调用,用new的话,内存空间就很恐怖了,是不是可以这么理解,而单例,这个并发没问题? 你能用一个单例完成事情,还非要new来new去做什么,new是需要成本的,同时gc也是需要成本的。 |
|
返回顶楼 | |
发表时间:2009-07-16
我觉得说接口没用的人,大概就是没用从自动化测试,持续集成中尝到甜头的人。
|
|
返回顶楼 | |
发表时间:2009-07-16
如果用new,可维护性不强,如果通过spring ioc,如果我想切换一个idao的实现,实现起来就方便了
|
|
返回顶楼 | |
发表时间:2009-07-16
可以看看 《java与设计模式》 这本书....
尤其前6章, 看完后会有很大收获... 从new一直到ioc, 基本目的是为了降低代码的耦合度, 争取达到的目的是(个人见解): 1. 一但代码写好就不需要对代码本身再做修改. 2. 任何一个模块代码的修改都不影响其他部分. 3. 将程序中的可变部分放到程序(代码)外部来处理.(在spring配置文件中替换具体实现要比修改代码来的简单) |
|
返回顶楼 | |
发表时间:2009-07-16
欢迎大家继续讨论。。。。
|
|
返回顶楼 | |
发表时间:2009-07-16
为什么要用IoC?因为你根本new不出对象来
你有UserService,想new一个UserDao,问题是这个UserDao可能需要一个JdbcTemplate才能工作,这个时候你又要new一个JdbcTemplate,而JdbcTemplate又需要DataSource才能工作,这个时候你又需要先new一个DataSource,假定你自己写了一个DriverManagerDataSource,终于把这个UserDao给new出来了,而运行的时候DataSource是从服务器jndi查找的,怎么办?改代码 等到UserService可以运行了,你会发现另外一个问题,很多资源被你new出来了,还要负责释放,如何释放?在哪里释放?自己管理对象的代价就是随着对象增加复杂度成指数增长 最终你就无法维护所有的代码了,只好推倒重写一遍 |
|
返回顶楼 | |
发表时间:2009-07-16
unsid 写道 我觉得说接口没用的人,大概就是没用从自动化测试,持续集成中尝到甜头的人。
自动化测试就一定需要接口,没有接口就不能自动化测试了。 |
|
返回顶楼 | |
发表时间:2009-07-16
最后修改:2009-07-16
个人偏解:将代码耦合变成了配置耦合,改配置比改代码方便,因为java是编译型的。
这种情况下,耦合一直存在,只是变了形式而已,所以真正解藕还是靠对象之间关系的设计来解决。 |
|
返回顶楼 | |
发表时间:2009-07-16
接着讨论哈哈
|
|
返回顶楼 | |
发表时间:2009-07-16
panhf2003 写道 xellos 写道 jakoes 写道 直接NEW就把各层耦合在一起了,不好
我知道你说的是对的。 我还想听听你说,这种耦合有什么关系? 我想听你实际体会,空想出来的我也会想,网上找来的我也会找,书上看来的我也会看。 我一直都为这个苦恼,没有切身体会,就无法提升自己的理解。 用new的话,是紧耦合,而且不利于测试,比如说你现在new了userservice,第一,现在如果想换一个实现userservice2,就需要改代码了,维护起来很麻烦,但是如果用ioc的就可以解决这个问题;第二,这样做不利于测试,因为无法插入一个测试模拟类,但是如果用ioc的话可以很方便的插入一个测试模拟类 你不改代码就要改配置文件,一样要改. |
|
返回顶楼 | |