ssh整合,action与logic之间统一接口问题

问题描述

struts1.3+hibernate3.0+spring2.0整合已经整合完了,但是有个问题就是action和logic之间的传值问题,也就是logic的接口应该怎么定义才能打到action调用的统一这个是我项目的结构图LoginActionpublic class LoginInAction extends BaseAction { LoginLogic loginLogic; @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String msg = ""; String url = request.getParameter("url"); LoginVO vo = new LoginVO msg = getLoginLogic().doIt(vo);//判断doit返回的string是成功还是失败 if(msg.toLowerCase().indexOf("error") >= 0){ request.setAttribute(ERROR_KEY.ERROR_INFO_NAME, msg); return mapping.findForward("error"); } if(msg.equals(ERROR_KEY.SUCCESS)){ userLoginVO = new UserLoginVO(); //成功就把logic里面的vo获得到,传送到页面和session中 userLoginVO = getLoginLogic().getUserLoginVO(); request.getSession().setAttribute(WEB_KEY.VO_USER_LOGIN, userLoginVO); return mapping.findForward("success"); } return mapping.findForward("error"); } private LoginLogic getLoginLogic() { return loginLogic; } public void setLoginLogic(LoginLogic loginLogic) { this.loginLogic = loginLogic; }}LoginLogic 接口public interface LoginLogic { /** * 主函数 * @param loginVO * @return ERROR_KEY */ public String doIt(LoginVO loginVO); /** * 获取userVO * * @return LoginVO */ public UserLoginVO getUserLoginVO();}LoginLogicImplpublic class LoginLogicImpl extends BaseLogicImpl implements LoginLogic { private LoginService loginService; private UserLoginVO userLoginVO; public LoginLogicImpl() { } public String doIt(LoginVO vo) { String msg = ERROR_KEY.ERROR_USERIDPWD_500; return msg; } private LoginService getLoginService() { return loginService; } public void setLoginService(LoginService loginService) { this.loginService = loginService; } public UserLoginVO getUserLoginVO() { return userLoginVO; } private void setUserLoginVO(UserLoginVO userLoginVO) { this.userLoginVO = userLoginVO; }可以看出,为了获取一个uservo只能在logic的实现类里面定义一个private UserLoginVO userLoginVO;大家知道,spring默认是单例模式,所以这样的话可能回导致vo被其他请求修改我想问问有没有一种方法能达到logic返回值可以支持多个,并且接口能定义为通用的,例如doit()这样的接口,所有的logic都是这一个主入口我目前想到的就是,把返回值定义为成Map的请问谁还有好的办法,谢谢了,前提是还是使用spring单例模式.谢谢 问题补充:myali88 写道

解决方案

引用呵,其实我问这些问题,就是我一直想往架构师方向发展,也就是您现在的这个职位.最后在问您一个关键的问题.我想往架构师方向发展,您能给我一些宝贵的建议好吗?谢谢了!!!呵呵 哈哈,你误会了,其实我不是工作上的架构师,这只是javaeye上的头衔。这个也是我的职业发展方向。个人觉得架构师主要在宏观上的把控,知识面要广,考虑问题需要从全局出发。所以很多知识你都需要了解。你可以看看这个:http://blog.csdn.net/cutesource/article/details/6007460,这个人才是真正的淘宝架构师。
解决方案二:
引用我想问问,您说5层架构和3层架构哪一种比较灵活而且能达到大众化也就是一种标准呢?那一种对项目的管理和开发上起到一种良好的方式 其实你这里说的5层架构其他和我们通常说的架构含义不太一样了,一般说架构分层,指的是“layer”,即逻辑上的划分,这样划分是为了层次清晰,如果划分太多也有过度设计的毛病。你看看ruby on rails里面,它其他是就是一个MVC架构,只分三层,然后其他都是按业务划分包,结构也很清晰。就分层来说,采用多层机构是对的,但不能太多,通常划分:表现层,业务层,基础设施层就可以了,而你的代码更多应该关注业务层。复杂系统的设计我建议你参考DDD(领域驱动设计)的一些原则。
解决方案三:
是的,这是以业务优先的方式来划分的。这种方式对于业务系统比较复杂的情况比较合适。每个负责业务模块的人开发也比较独立,较少会出现冲突(比如,SVN提交)。对于比较简单的业务系统,我建议采用技术分层优先的方式,不同的业务通过类命名来区分,比如:NewsAction,NewsService,NewsDAO,这样避免太多的分包,把简单问题复杂化。
解决方案四:
为什么你的包里面会把service和logic分开呢?一般不都是service里面包含业务逻辑的么?你可以按业务分包或者技术分层来分包,这个两个差别不是特别大,如果一个开发人员完全负责整个业务模块,那么采用业务分包,然后内部采用技术分层分包,这样比较清晰,因为从Acion到DAO都有一个人员完成,所以业务分包包含所有部分,这种方式优先。
解决方案五:
引用我想问问有没有一种方法能达到logic返回值可以支持多个,并且接口能定义为通用的,例如doit()这样的接口,所有的logic都是这一个主入口 你可以在service层定义一个Facade,并且里面可以只定义一个方法,方法签名包含:被调用service的Class,调用方面名,参数列表以及返回值Class,这样你的Action调用全部都统一了,而返回值的多样性通过泛型来支持,类似于spring 3.0里面定义的:<T> T getBean(String name, Class<T> requiredType) throws BeansException;不过,我觉得这样刻意把action对service的调用统一,反而不好,所有调用都统一到一个方法上,然后在委派到具体的service,这样模糊了业务边界。

时间: 2025-01-26 07:08:08

ssh整合,action与logic之间统一接口问题的相关文章

SSH整合问题实现DAO接口出现的问题

问题描述 SSH整合问题实现DAO接口出现的问题 package com.integration.dao; import java.util.List; import com.integration.entity.User; import org.hibernate.Query; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class UserDAOImpl extends Hiber

注入失败-SSH 整合 当Action切面引入事务管理后,属性无法注入,求大神帮忙看一下

问题描述 SSH 整合 当Action切面引入事务管理后,属性无法注入,求大神帮忙看一下 没加入事务切面前,Action中的注入costDao可以注入,可是applicationContext.xml加入了一下配置后 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="ses

android开发-SSH整合问题Unable to instantiate Action

问题描述 SSH整合问题Unable to instantiate Action 问题:Unable to instantiate Action, userAction, defined for 'user-userLogin' in namespace ''userAction 不知道哪里问题,网上的方法试了好多遍,都没解决,客户端只能停留在登录界面,无法登录成功,无法访问服务器,求大神指教 Struts.xml <?xml version="1.0" encoding=&qu

SSH整合(二)——利用Spring来装配Action类

        在上篇文章(SSH整合(一)--直接获取ApplicationContext)中,在Action类中通过获取ApplicationContext对象,调用getBean方法来实例化bean类,这种方法将Action类与Spring的绑定装配JavaBean绑定的过紧,大大增加了他们的耦合度.如果装配文件的内容有变化,很可能要修改Action类的代码.      所以我们将装配Action类及其属性的方法也放到Spring中. 一,由Spring创建Action对象       例

SSH, 整合分页功能,连带DAO经典封装

任何一个封装讲究的是,使用,多状态. Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然后在继承ServiceManage,ServiceManage类是用来 存放共用的东西:response,重要的是Service的get set 具体讲一下PageManage,    totalPages;//总页数    totalRecord;//总记录数    showRecordNum=

带分页功能的SSH整合,DAO层经典封装

任何一个封装讲究的是,使用,多状态.Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然后在继承ServiceManage,ServiceManage类是用来 存放共用的东西:response,重要的是Service的get set 具体讲一下PageManage,    totalPages;//总页数    totalRecord;//总记录数    showRecordNum=D

SSH整合学习笔记之spring与hibernate简单整合.doc

SSH整合学习笔记 大致的学习了一下struts1.x struts2.x  spring2.5 hibernate3.6,觉得东西很多,好些东西都记不住,最后发现想记住的方法就是多练习.自己多写一下简单的工程也会把这些知识巩固,但是公司现在不用这个,所以只能记下笔记,不忙的时候再拿来看看,坚持的练习一下.我也是初学,所以只是记下一些基础的东西,如果写错了什么,请朋友多多指出. 个人对SSH的理解也不算深入,只是大概的学完一圈觉得spring很强大,有的人觉得spring很难学,但是我觉得str

配置-求助,SSH整合后拦截器不起作用

问题描述 求助,SSH整合后拦截器不起作用 struts.xml配置如下 <interceptors> <interceptor name="loginInterceptor" class="com.music.interceptor.LoginInterceptor"></interceptor> <interceptor-stack name="globalInterceptor"> <i

exception-升级ssh整合出现错误java.lang.NoSuchMethodError:

问题描述 升级ssh整合出现错误java.lang.NoSuchMethodError: 下面是控制台打印的信息,麻烦看到的高手帮忙解决: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [cn/com/hope/framework/spring/appl