模型就是处理数据的,
struts中的业务逻辑应该写在持久层中去,不应该写在action里

解决方案 »

  1.   

    我也觉得,业务逻辑还是一定不要放在Action里面比较好!
      

  2.   

    Web层要做的尽可能的瘦web层--业务层--持久层业务逻辑和实体都在业务层中
      

  3.   

    Struts 的action一般情况下,调用业务层,也就是所谓的BO层,然后BO层调用DAO完来完成业务.一般的情况下,BO要采用面向接口方式来编写,
      

  4.   

    顶pdw2009,那就用spring来做后台的处理,struts就处理显示和跳转部分好了
      

  5.   

    衡量web系统质量的一个准则是:解藕如何?
    业务逻辑不应该写到action ,p
      

  6.   

    Action里面应该是对你业务层代码的调用,
    根据J2ee的核心模式,
    Action是在表现层,
    业务的东西应该是业务层代码,
    还应该有集成层,持久层,
      

  7.   

    个人感觉,在struts的Action类中应该避免业务逻辑,
    action完成的是画面和服务端的一种交互,提供了一个窗口,
    所以在action中不应该放业务逻辑的处理,一般的方法都是这样的,
    1层,action以及actionform还有画面需要用到的bean.包括画面项目的显示编辑以及准备
    业务层需要的数据.
    2层,业务逻辑层,主要完成业务的处理.
    3层,这层一般只是DB的相关类.个人见解
      

  8.   

    楼上的都说清楚了 可以写 但要尽量不要去在action里写业务逻辑的
      

  9.   

    晕,struts是对controller的封装,action是dispatcher,从这里去调用business unit,所以action不是MVC中的M,同样struts中也没有提供实实在在的view,对于M和V它只提供了接口.
    FormBean可以作为ValueObject,也可以不是ValueObject,因为毕竟ValueObject是与具体业务相关的,这些在介绍struts的书中都有,我看的是struts in action(不知道谁弄的,免费的)
    bluelily22(丁丁) 的说法,我理解有两中可能:一是在action里实现business logic,二是业务层和持久层混合一起了.
    pdw2009(捡垃圾去上网)的方法,估计是让FormBean实现了business value object interface,否则不会只用dao的,因为dao实际上是数据访问器,起输入(大多数时候也应该包含输出)应该是value object.还有持久层不一定用vo+dao的方式实现的,还可以引入persistence object.最后,楼主,如果是一个项目的话,没有必要这么执着,兄弟们说的再多,估计你也不能完全领会,甚至不能同意,我的意见是:按自己的掌握的尽量做到最好,实践之后,也许你总结的经验比兄弟们更深刻.
      

  10.   

    To: samepoint(猪样年华)>>不赞成你的说法,struts不只是对controller的封装,struts的action才是对Controller的封装,struts的frombean和动态bean充当MVC的Model层(数据模型层),tags-tiles、tags-logic、tags-html、tags-bean等tag是对MVC View层的封装,struts是一套MVC的framework,可能你对struts了解的还不够全面。(这也是我对struts的理解)To: 楼主>>我觉得业务逻辑不该放在action中,建议采用pdw2009(捡垃圾去上网)说的方式。
      

  11.   

    to: MHB
    我们来讨论下哈:“struts的action才是对Controller的封装”,说明我们在这一点上有些共识,不过我认为action是controller的一部分,你认为是全部。
    我又这么几个问题,请你回答我:
    1.action才是对controller的封装,那么actionServlet的功能是什么?
    2.MVC中的controller,model,view各自的职责是什么?
    3.MVC中的model是指数据模型层吗?不能是业务模型层吗?
    4.struts中使用JSF可不可以?如果不用struts提供的tag libs,是不是就不能用struts?
    5.使用stuts,那么view一定要是web page,而不能是其他的吗?关于FormBean的问题,我认为form bean不一定是value object。比如说我们有两个数据实体A和B,其中各包含属性(a1,a2,a3)和(b1,b2,b3),写清楚点如下:
    数据实体A(a1,a2,a3)
    数据实体B(b1,b2,b3)
    (这里我们完全可以把数据实体理解为数据库中的表,属性理解为字段)
    再假设我们有两个页面page1和page2:
    page1提供对A.a1,A.a2两个属性的修改服务,而page2提供对A.a1,A.a3,B.b1,B.b3四个属性的修改服务。
    我想在struts中普通用法应该针对这两个页面会存在两个form bean:bean1和bean2。
    如果直接使用bean1和bean2作为value object传递至数据层去操作数据库,那么势必会有两种不同的访问方法(两个dao,一个dao中的两个方法,两个持久化对象,等等了)。那么两个实体中的6个属性的全排列是多少,是不是我们要提供这么多种访问方法呢?
    我想回答是否定的,因为实际业务中很有可能存在一个实体内包含数十个属性(可能更多),那是比较可怕的。
    针对这种情况采用vo+dao模式前提下,我说一种我会使用的简单方法:针对两个数据实体创建两个vo和两个dao,在bean1、bean2与vo1、vo2之间建立adapter,在action中使用adapter进行转换,继而调用业务层->数据层->接受返回值。
    当然存在另外的方法,其中的一种可能是pdw2009(捡垃圾去上网)使用的策略,将两个vo定义成interface,让bean1和bean2分别实现vo interface,那么就可以将bean1和bean2作为vo向后传递了。
    可能大家会认为我们可以使用灵活的sql语句来进行变通,对此我想做两点说明:一、业务逻辑在实际中是复杂多变的,一个form bean中容纳的数据可能不来源与一个数据实体,一个page的操作可能同时涉及了对数据的插入、更新的符合操作;二、我们谈的是java,mvc,stuts,不是ANSI SQL。
    可能大家针对我所举的例子会说:我们完全可以使用DynaBean可以解决。是的,可以解决,没有问题的,但是是否合适呢?如果在类似的情况下使用DynaBean,那么我们会在action中对DynaBean中的数据成员进行判断和分检,依据是我们实际的业务逻辑,那么这样算不算在action中包含了业务逻辑?
    以上就是我的一些认识了,大家来讨论啊
      

  12.   

    1.action才是对controller的封装,那么actionServlet的功能是什么?
    2.MVC中的controller,model,view各自的职责是什么?
    3.MVC中的model是指数据模型层吗?不能是业务模型层吗?
    4.struts中使用JSF可不可以?如果不用struts提供的tag libs,是不是就不能用struts?
    5.使用stuts,那么view一定要是web page,而不能是其他的吗?>>上面说将struts的formbean和动态bean充当MVC的Model层,我仅仅说的是充当,而且是数据模型层。其实每个人对struts的定义略有不同,上面我只是写了我对struts的定义,在使用struts做项目时我从没将业务层置入struts所定义的任意层。至于你说的struts中可不可以使用JSF,我可以肯定的回答你“不可以”,JSF和struts是二种截然不同的MVC实现,也许你会说JSF中的某某“可以”在struts中使用(至今我还没想出jsf中的什么可以在struts中使用,难道是tag?,而我认为tag也不可以。),那么我们对这个“可以”的定义范围不同。如果你在Windows操作系统中不用IE,难道就不能用Windows操作系统吗?tag只是struts中的一部份,可选的。不好意思,我只作了这些回答。
      

  13.   

    to:MHB(秋天的风)
    谢谢你的回答了,看了你的回答后我又重新去了下官方站点,对它有了一个重新的认识,发现了一个问题:我们的认识都是比较片面的(我的原因主要在于没有去学习新版本的变化),所以我们的讨论可以在以下地址找到一个答案(关于struts是什么,包含了什么,并没有包含楼主所说的模式).
    地址:http://struts.apache.org/
    我引用这个page中的一段话:
    Struts provides its own Controller component and integrates with other technologies to provide the Model and the View. For the Model, Struts can interact with standard data access technologies, like JDBC and EJB, as well as most any third-party packages, like Hibernate, iBATIS, or Object Relational Bridge. For the View, Struts works well with JavaServer Pages, including JSTL and JSF, as well as Velocity Templates, XSLT, and other presentation systems. 
    从原文中,我们可以看出struts提供了controller component并且整合了model和view的相关技术,所以我说struts完全是controller component应该是错误的,给大家一个错误的概念,我表示歉意.
    随后原文中也提出struts可以很好的与jsp协同工作,当然包括了生成jsp的一系列的工具:jstl,jsf,velocity,xslt及其他用于用户显示的系统.从此点说明来看,我觉得你说struts中不可以用jsf,好象有那么一点点的不准确,你觉得呢?
    我现在对struts的总体感觉是,controller是主体部分,同时整合了多种插件,并且在符合struts规范下我们可以向struts中填充更多的插件.
      

  14.   

    到目前我所掌握的JSF情况来看,认为JSF由JSF App和JSF Tag二部份组成,你能具体说说JSF的那些东东可以在struts中使用吗?如果将JSF Tag用在基于struts的应用架框中更本不能体现JSF Tag的价值或者说根本无用。
      

  15.   

    http://struts.apache.org/proposals/struts-faces.html
    About Struts and JSF
      

  16.   

    to:MHB(秋天的风)
    的确,我们做项目很少有在使用struts的前提下,而使用JSF或其他用于描述表现层的库(工具,系统)的,但是我们不能排除已经存在了一个web project的表现层使用JSF来构建,而现在需要对它的controller进行改造--也许想利用struts,在这种前提下,我们是不是需要使用struts提供的tag lib来对业已存在的表现层进行重新构造呢?如果是的话,那么可能有悖于MVC的理论,更不能体现MVC的优势.
    呵呵,很抱歉我在打太极,没有正面回答你的问题,我不得不承认在项目中,我的确是没有将struts和JSF融合使用,而且这样做肯定是有风险的,但是我们不能说struts和JSF不能协同工作的,不对吗?
    另外,MHB(秋天的风),我们在关于这个问题的讨论的过程中,我觉得其实在struts的实际项目经验方面,你更胜一筹.