最近新进一家公司,做一个后台系统,用的是ssh框架。
系统结构是module,dao,service,web这种结构分的。
我很不解的就是他们一张表对应一个dao,然后service里又是同样的方法只是调用了一下dao什么也没做(相当于把dao层copy了一遍),然后基本每个dao里面做的事都差不多,增删改查分页条件查询之类的。
感觉跟我以前的习惯很不一样,我的做法是写一个通用的dao包含了大多数的常见操作,如果需要扩展可以去继承他。个人觉得也很方便。现在做了一段时间越来越糊涂了,dao层到底该怎么弄,一个实体对象对应一个dao还是写个具有通用性质的dao?求解
系统结构是module,dao,service,web这种结构分的。
我很不解的就是他们一张表对应一个dao,然后service里又是同样的方法只是调用了一下dao什么也没做(相当于把dao层copy了一遍),然后基本每个dao里面做的事都差不多,增删改查分页条件查询之类的。
感觉跟我以前的习惯很不一样,我的做法是写一个通用的dao包含了大多数的常见操作,如果需要扩展可以去继承他。个人觉得也很方便。现在做了一段时间越来越糊涂了,dao层到底该怎么弄,一个实体对象对应一个dao还是写个具有通用性质的dao?求解
解决方案 »
- 大侠帮我看看这是怎么回事?
- list.get(i)=超重,甘油三脂(TG)偏高,肝囊肿 怎么去掉里面的逗号?
- 改写过eXtremeComponents的table组件的大虾帮忙看看
- 几道Java判断题,请高手帮忙帮忙!
- org.springframework.web.context.ContextLoaderListener 在哪个jar里面呀
- Struts一个问题,求大家帮看看
- 非常简单的hibernate映射但我就是生成数据库失败,请哪位帮我解答一下
- 关于javamail验证问题,请大家帮忙!
- 如何在java中调用matlab的算法?
- shiro配置报错,好心人给看看吧
- 用javamail 发邮件 报空指针
- 还是关于分层的一些问题
楼主的通用dao是怎么写的 ,自己用sql实现的吗,还是用到什么orm框架(比如hibernate)
hibernate写的,现在按照这个公司的模式,想在service里加个方法就得到dao层里加个一样的方法,就在哪里copy来copy去的。
再有就是你说的service里和dao里的代码一样。那只能说明你的业务逻辑很简单而已。。不能说明别的什么问题。
1.重用度高 service里如果需要调2个以上的dao ,按你的描述现在只调了一个 优势变成的柔势 ,但是一但复杂些就看出优势了。2.可维护性好 比如某个表改了 你只需改相应的dao就可以了,不会影响到service层 也就是你的业务相关代码都不需要改, 3.耦合底 甚至你换个dao ,service层是不需改的当然我说的这些 都是在项目越复杂越管用的,如果一个简单的项目自然就是多余的。
dao里对应每一个表单数据库操作
service业务逻辑处理代码,如这里可以调用多个表的dao以完成你的业务需要
web这里写你jsp页面的请求action这样开发的好处是,同时可以和多个同时一起开发,以项目模块为一个包,各不干涉,提高开发效率。
一个人开发最快的方法是把代码写在JSP里,最方便,最省事。可以全部用JSP,一个JAVA都不用。何谈SSH,说实话,对简单的系统,SSH只会让事情变得更复杂。特别是Spring.
个人觉得当系统越复杂越能体现SSH或者MVC的价值...小系统参考大系统的结构也不是不可.
当然是通用Dao了,一个实体一个dao,这是在锻炼Ctrl+C跟Ctrl+V的能力吧;Service处理不同的业务逻辑,数据库的交互使用一个Dao实现。
你没有理解我的意思,数据库的操作往往就是增删改查这几个操作,在使用了hibernate之后这些操作更加简单,比如save我在dao里面写一个save(Object o)这样的方法所有的实体对象都可以存进数据库,如果需要更多的操作可以通过继承来实现总的来说就是将一些通用的方法抽象出来,不同的地方再去进行相应的扩展。
而且如果真有100张表一张表一个dao光增删改查都要写死人了
|
实体dao继承通用dao---extends通用DAO的实现,impl对应的dao
|
对应service
.......想了一下不知道这种结构怎么样,因为有些地方确实需要一些不同的操作。。就是把那些常用操作进一步抽象出来
如果应用只要一个DAO就可以满足了,那当然好.
甚至可以直接做成像.NET里的datagridview的东西.更不错,本人最近就考虑做一个这种玩意儿,以后小应用里的数据库操作, 就方便了
但是查询的话,貌似不好抽象出来,查询条件,查询的object,对于查询的。我想问下lz你是怎么抽象出来的
不知道你有没有明白我的意思。
如果没有额外的逻辑附加当然可以通用一个,就算有额外的附加继承扩展就可以了!为什么非要和人数来扯上关系?
增删改这些大家似乎没太大的意见,就是查询的时候,条件不同,结果不同等等,这个就麻烦一点,其实也有办法解决,就是把SQL
都放到配置文件中,再写一个解析SQL的类即可(听起来比较麻烦,对一个大型项目来说还是值得的)。