我遇到的疑惑
--action
--CommonAction
--AAction
--BAction
--CAction
--service
---AService
---BService
--service.impl
--AServiceImpl
--BServiceImpl
--dao
--ADao
--BDao
--dao.impl
--ADaoImpl
--BDaoImpl
public abstract class CommonAction extends DispatchAction{ public AService aService; pulbic BService bService; ...setter/getter }
public class BAction extends CommonDispatchAction { public ActionForward getList(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception { List<a> aList = aService.getAList(); List<B> bList = bService.getBList(); ...}}
public class AServiceImpl implements AService { private ADao aDao; ...setter/getter public void add(A a) { aDao.add(a); } public List<a> getAList(){ return aDao.getAList(); } ... }
问题1:我的一个service对应一个dao,service种方法和dao中方法一模一样,而且service实现类中仅仅是调用dao方法。这种实现方法有什么不妥,好的实现方式是什么?
问题2:如上代码,我想在 BAction 中获得A数据或者C,D,E,F ... 数据只能先定义一个抽象类CommonAction,这样实现方法的弊端是什么,如果我想实现这个功能(在 BAction 中获得A数据或者C,DE,F数据),应该怎样设计?
[code="java"] /**
* 个人信息页跳转
*/
public String personal() throws Exception {
userInfo = getServMgr().getUserService().getUserInfo(getLoginUserId());
return "personal";
}[/code]
userInfo是Map类型的,Action里只需准备数据集合,业务处理都是下一层的事情
[code="java"] public Map getUserInfo(Integer userId) {
// 取出User对象
User user = getDAOMgr().getUserDAO().getUserById(userId);
// 对象转换为Map
Map userMap = objectToMap(user);
return userMap;
}[/code]
就是这么个思路
[quote]我的一个service对应一个dao,service种方法和dao中方法一模一样,而且service实现类中仅仅是调用dao方法。这种实现方法有什么不妥,好的实现方式是什么?[/quote]
这样设计挺好的,这样设计将数据库的操作层与服务层分离。耦合性小。
这种设计都是典型的N层架构嘛
表示层action -》业务逻辑层service-》数据访问层dao
每一层都有这一层的职责,
看看这个贴详细讨论了分层。
http://topic.csdn.net/u/20091101/20/33d46e49-05a0-48b3-bdaa-3dc7fecdc8ea.html
[quote]一般现实企业开发应用中是否都这样设计的?[/quote]
个人认为分层如下:
Web层
业务层
服务层
数据访问层
1.写一个ServiceManager,把所以的Service注册进去,这个Mananger和所有的Service都在Spring中注入,就可以直接getBean()获取他们的对象了,这样比较方便。
2.最好不要在Action中相互操作,数据的处理往下降一层,就可以使用1中的办法来解决了。