SSH框架中设计问题

我遇到的疑惑

 

--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中的办法来解决了。