请教在ssh种哪里实现逻辑代码

请教banq老师,我们一个项目中正在使用SSH框架。

按照通常的规则,status负责做VIEW。。service负责调用hibernate的执行方法。

但我们现在的业务逻辑全部写在action当中。。而我觉得很不合理,action应该是servlet的子集做的应该只是mappingForword。

我这样想是不是对呢? 如果不对的话,请说明!~

>我们现在的业务逻辑全部写在action当中
完全错误,Action是作为前后台调度,是GOF模式中的Mediator,不能写入业务,否则哪来的业务层?直接耦合了界面和业务,如果将来不使用struts作为表现层,使用JSF或者Swing等胖客户端,那不是连业务逻辑一起要更换修改吗?这个和Delphi那样传统系统有什么区别。

这些都是由于没有OO思维导致的。

那是不是不是应该
jsp->action->class->service->dao->db ?这样子的进进行方式


在action 中只写mappingForword?

差不多,但不只是这样,采取Evans DDD来设计分层是目前最合理的设计方案,具体可参考JiveJdon3源码。

应该是
jsp->action->service->领域模型对象(业务处理)->持久化
同时要注意控制事务,确保事务控制在service层。一个service调用一次事务。

>>同时要注意控制事务,确保事务控制在service层。一个service调用一次事务。

同意,不过是针对业务处理,查询的情况就不用事务了

业务逻辑写在service里啊

业务逻辑当然不能写在service里,但是可以在service中调用。

业务逻辑写在service里就造成所谓饥饿模型 瘦模型。参考本站 模型 标签相关讨论。

个人浅见哈

我觉得ssh中,ACTION 是服务器和远程结构的信使,只负责收发信息,信息发向什么方向的控制。包括out和in
但是ACTION里面要引入业务层,所有ACTION又是业务层的代理,业务层是它的实现,而业务层里面只负责转接输入信息和处理信息,并返回,处理的过程中要调用DAO,所以这里才是所有数据的汇集地,进来的信息,出去的信息,从DAO中出来的数据,都是交给业务层来运算。另外业务层还能调用业务层的数据。但是这种调用会影响业务层的稳定,如果被调用的业务层改变了,给系统带来其他的影响。
DAO负责准备数据和数据的持久化,
[该贴被qqggcc于2009-03-21 19:12修改过]