问题描述
我做过的项目JavaDAO都是没有内部状态的.一般DAO的方法全部写成static,然后在加一个private构造,然后一个singleton的工厂方法.可是看很多项目,设计的都是DAO的interface,然后一个对应的implpackage,然后一个对应的一般实现类.有的甚至还加一个工厂类.如果没有内部方法,一个DAO就是一个数据库ORM存取数据的中间件,没有必要搞这么复杂.
解决方案
解决方案二:
没这么弄过……
解决方案三:
不能编辑?上面最后一句写错了:"如果没有内部状态,一个DAO就是一个数据库ORM存取数据的中间件,没有必要搞这么复杂."
解决方案四:
没那么复杂,我遇到的都是你说的第二种设计的都是DAO的interface,然后一个对应的implpackage,然后一个对应的一般实现类
解决方案五:
DAO不需要状态吧!
解决方案六:
引用3楼shijing266的回复:
没那么复杂,我遇到的都是你说的第二种设计的都是DAO的interface,然后一个对应的implpackage,然后一个对应的一般实现类
设计这个接口有多大的好处?你会对这个接口有不同的实现类?mysql一个,oracle一个?只有一个实现类,岂不是更简单?内有内部状态,都写成static方法,岂不是减少内存消耗?
解决方案七:
引用4楼longtian1213的回复:
DAO不需要状态吧!
如果不需要状态,那么都应该写成static的,然后给一个singleton的,全内存一个实例,节省内存...
解决方案八:
引用5楼spytian的回复:
Quote: 引用3楼shijing266的回复:
没那么复杂,我遇到的都是你说的第二种设计的都是DAO的interface,然后一个对应的implpackage,然后一个对应的一般实现类设计这个接口有多大的好处?你会对这个接口有不同的实现类?mysql一个,oracle一个?只有一个实现类,岂不是更简单?内有内部状态,都写成static方法,岂不是减少内存消耗?
存在既有道理...这样的结构降低耦合度,其他作用我还真没研究过,有些东西,好像会用就行
解决方案九:
引用6楼spytian的回复:
Quote: 引用4楼longtian1213的回复:
DAO不需要状态吧!如果不需要状态,那么都应该写成static的,然后给一个singleton的,全内存一个实例,节省内存...
单例没办法继承吧,现在都讲面向接口编程,抽象出可变性然后封装!
解决方案十:
接口编程最大的好处就是方便扩展
解决方案十一:
LZ说的没错,DAO一般接受参数然后操作数据库就好,没有状态,完全可以单例至于DAO也抽象,那是可以针对不同数据库
解决方案十二:
一般是用第二种。目的是为了解决耦合性,达到一个松散耦合的作用,也就是利用接口编程松散耦合。加一个工厂类,是使得耦合性更加低了。万一后期你的DAO的某个类需要改名字,或者是对于其他数据库的实现类,或者是移动了路径。岂不是你在你的service里面,每个地方都要去更改涉及到这个类的名字的地方。或者是二次开发之类的,可扩展性也会更好一点。当然如果你觉得一定不会再更改了,也不会有二次开发了。那这样当然是没有必要。但是软件存在这样的情况一般很少。
解决方案十三:
dao和service说白了都是工具,引入spring后都是单例的,用哪个注解配哪个,接口就很方便了