[java DAO] 你们的 java DAO 都有内部状态吗?

问题描述

我做过的项目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后都是单例的,用哪个注解配哪个,接口就很方便了

时间: 2024-11-01 10:28:33

[java DAO] 你们的 java DAO 都有内部状态吗?的相关文章

Java的Spring框架中DAO数据访问对象的使用示例_java

Spring DAO之JDBC  Spring提供的DAO(数据访问对象)支持主要的目的是便于以标准的方式使用不同的数据访问技术, 如JDBC,Hibernate或者JDO等.它不仅可以让你方便地在这些持久化技术间切换, 而且让你在编码的时候不用考虑处理各种技术中特定的异常. 为了便于以一种一致的方式使用各种数据访问技术,如JDBC.JDO和Hibernate, Spring提供了一套抽象DAO类供你扩展.这些抽象类提供了一些方法,通过它们你可以 获得与你当前使用的数据访问技术相关的数据源和其他

java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗

问题描述 java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗 java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗 final能不能修饰类呢 解决方案 不知道你说的方法的方法是什么 final可以修饰类,但是含义不同,final类表示无法派生. 解决方案二: final可以修饰类,方法,和域, 如果修饰方法, 参考这个博客吧http://blog.csdn.net/zrf1335348191/article/details/501

java 鼠标和按键监听都注册时。鼠标拖曳会触发按键监听的Ctrl键是怎么回事?

问题描述 java 鼠标和按键监听都注册时.鼠标拖曳会触发按键监听的Ctrl键是怎么回事? 我写的一程序.添加了按键监听和鼠标监听,各执行一个功能.当我按住鼠标左或右键拖曳的时候,触发了按键监听那里的事件.于是我就在按键监听类里用System.out.print(e.getKeyCode),打印出来是0x11(ctrl的键码). 解决方案 你的问题不太清晰. 什么怎么回事?? 不知道你想获取啥信息 解决方案二: 按理说不会,看下是不是你启动程序的时候朝程序发了什么按键,完全用鼠标来启动你的程序.

java代码-急求java高手,帮忙看下面的游戏代码,为何只能运行界面类然后其他都看不见也不能玩

问题描述 急求java高手,帮忙看下面的游戏代码,为何只能运行界面类然后其他都看不见也不能玩 //子弹Bullet类 package hy; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; public class Bullet { //坐标 public int x,y; //子弹大小 public int width,height; //子弹杀伤力 public int kill; //速度

Oracle+ibatis的<select>中resultClass是java.util.HashMap 返回结果key都是大写的变量名 如何解决

问题描述 如题:Oracle+ibatis的<select>中resultClass是java.util.HashMap 返回结果key都是大写的变量名 如何解决如果用resultClass用自定义的class可以解决,那么不同的多表查询岂不是要定义多个class来装这些结果集,即便是用resultMap还是得定义相关的配置,总不会每定义一个<select>(假设都是多表查询,而且都是不同的表),都要定义一个resultClass或者resultMap吧?我现在的问题是:用ibat

java的jmf和环境变量都设置好了,但项目无法调用javax.media类.

问题描述 java的jmf和环境变量都设置好了,但项目无法调用javax.media类. 无法调用media类.每当import media类时,都出现:没有访问权限,无法访问media库, 想问为什么?有别的驱动调动摄像头的办法吗?

从事java开发1年,你们都是什么水平?

问题描述 从事java开发1年,你们都是什么水平? 解决方案 解决方案二:有的1年甚至半年就项目经理了.那要看你个人的水平.解决方案三:基本达到前后台熟练crud解决方案四:熟练的使用java.util下面的几个类--

Java编程思想学习笔记——一切都是对象

前言 Java是基于C++的,但Java是一种更加纯粹的面向对象程序设计语言. C++和Java都是混合/杂合型语言.杂合型语言允许多种编程风格. 用引用操纵对象 每种编程语言都有自己操纵内存中元素的方式. 直接操纵元素 用某种基于特殊语法的间接表示(C和C++里的指针) 用引用操纵对象(Java) 在Java中,一切都被视为对象.操纵的标识符实际上是对象的一个引用. 类比为遥控器(引用)来操纵电视机(对象) 只要把握这个遥控器,就能保持与电视机的连接 改变频道或减小音量,实际操纵的是遥控器(引

Java新手入门:Java编程三十条规则

编程 1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName thisIsMethodOrFieldName 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母.这样便可标志出它们属于编译期的常数. Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此.对于域名扩展名称,如com,org,net