为什么每个pojo都要对应一个DAO,如user.java--->userDao.java,org.java-->orgDao.java 我觉得直接用一个DAO就已经能够操作所有的pojo类了如:user.java,org.java。。---->DAO.java,我觉得这样很简单,持久层变得很容易维护,也很容易更换。
这样做的好处是什么,怎样样体现出来,不要告诉我一些空话,提高系统灵活性,搞高可维护性,。我要的是你说搞高了灵活性,那么是怎样搞高的,为什么能提高,不要空话。
这样做的好处是什么,怎样样体现出来,不要告诉我一些空话,提高系统灵活性,搞高可维护性,。我要的是你说搞高了灵活性,那么是怎样搞高的,为什么能提高,不要空话。
一个POJO对应一个DAO,这样做也方便开发人员查看代码呀。
如果方便service层调用,我直接一个公用的dao注入到service里面去,这样不是更方便吗?我没必要每一个类都得注入一个对应的dao啊
,这样只要在Service里定义一个Dao就可以了,如果要更改数据库的话,在beans里更改Dao的实现类就可以了.
如果不跨库的话没必要定义接口,直接实现就行.不知道我解释清楚没.
这样会方便么???功能再拓展怎么办???
OOAD中的一个目标就是要把类的职能单一化。类的职能单一后,才能真正达到对拓展开放,对修改关闭。不知道这样说你能明白不。
這樣的話,你的一個公用的dao,會有很多的方法內容,增加該類的代碼量 ,加載這個類的時候耗時更長
每一個實體類,對應一個dao,每一個dao又對應每一個service這樣一對一的關係很清晰,並且,每個業務層的業務不同,這就要求dao裏面實現的方法不同。而每個dao有針對於一個實體類,對其專門的管理,如果你把所有的業務方法都放到一個dao裏面維護起來那麼多代碼,不方便找。更不方便後來人員的對其維護,這樣的框架,把bean ---dao----service----action分層聯繫起來線路清晰,按照這個規則--------無論是你,或者是後序人員更改和修改程序都有據可循另外,如果只有一個dao,每次維護都有更改該類,不方便版本控制一般都是一個人負責一個模塊,把這些分開,分層,無論你維護那一個業務層,都不會影響到其他的業務方法按照你的想法,把所以的業務方法都放在一個dao裏面,試問,維護其中某一個也為方法,勢必影響其他業務方法
他們在同一個dao裏面。把業務方法,分層,分開,就是為了,方便後期維護,希望你能明白。
public interface IDAOBase<T> {
/**
* 刷出并清空Session
*/
public void flushAndClearSession(); /**
* 保存实体
*/
public void save(T o) throws SQLException; /**
* 更新实体
*/
public void update(T o) throws SQLException; /**
* 更新或者保存实体
*/
public void saveorupdate(T o) throws SQLException; /**
* 根据ID删除实体
*/ public void delete(String obj, String string) throws SQLException;
/**
* 根据ID查找实体
*/
public T findById(Class clazz, Serializable id) throws SQLException; /**
* 根据条件查找所有实体且分页
*/
public List<T> findByCriteria(Class clazz, int currentpage, int rows, String s)
throws SQLException; /**
* 根据字符串查找实体
*/
public List<T> findTo(String obj) throws SQLException; /**
* 根据字符串查找实体且分页
*/
public List<T> findTopage(String obj, int currentpage, int rows)
throws SQLException; /**
* 前台根据字符串查找实体且分页
*/
public List<T> findToweb(String obj, int currentpage, int rows)
throws SQLException; /**
* 刷新缓存
*/
public void flush() throws SQLException; /**
* 清除缓存
*/
public void clear() throws SQLException; /**
* 得到所有数据
*/
public int getAllCount() throws SQLException; /**
* 执行hql语句
*/
public void exesql(String sql) throws SQLException;}
public class DAOImplBase<T> implements IDAOBase<T> {.
.
.}
在service层我可以这样pbulic Class userService{
DAOBase service通过spring注入以后,我就可以操作了
}
我的意思就是有没有必要在在定义一层UserDAO出来这样使用
pbulic Class userService{
UserDao userdao
}
因为在我看到的不管大大小小的项目中都这样使用,我老是觉得这样多太麻烦了,增加了很多类和接口,像我上面的做法不是很简单吗,而且符合开闭原则啊,
就是hibernate这样设计的这样是维护,和修改都很方便并且互不影响
估计楼主没有做过二次开发或者,去修改别人的代码.......
在控制层中写Sql语句和在JSP中写java语句犯的错是一个级别的。
你总不能在逻辑控制层去写hql语句吧,大哥。
Data Access Object
就是要完全屏蔽数据库的底层操作,上层Service根本不用关心数据库的类型及表结构(甚至于底层到底是不是一个真正的数据库,比如只是一个简单的配置文件)。
如果都写到一个类里面性能还可能提高呢,至少层次少了完成同一个功能调用的方法少了。
OOAD不是为了解决性能问题的,相反有时还会影响性能。比如J2ME开发时,就要尽量少用OOAD。
怎么就不懂嫩,就那么简单的事10楼说的很详细了你记住,你用一个共同的IDao 接口,用Spring 去注入是很方便。但是如果你以后的项目有变动,需要修改。或者你的项目别人要去修改,你用个IDAO 去注入,Spring能找到,但是别人能那么快的速度找到么?看来看去就晕了,主要就是一个那种分成方式很清晰。别人修改你的代码,直接就可以了解跟踪你的逻辑。
同时你也可以把一些公共的方法都放到一个DAO中,让其他子类的dao都继承这个父类。这样可以简化开发