在网上看到许多的材料,似乎对这两个说的不是很明白,我认为,Action应该属于Controller。事实上,在孙卫琴的《精通Struts》和http://dev.21tx.com/2005/04/27/39802.html 的《Struts用户指南》中,都认为Action应该属于Controller。
(1)MVC中,model表示业务数据和业务逻辑(商业逻辑).通常由JavaBean或EJB组件来实现。业务逻辑即“怎么做”,而Controller(控制器)即“决定做什么”,Action实际上是“决定做什么”,它应该属于Controller的。
(2)为了保证代码的可重用性,业务逻辑不应该设计和实现和所运行的Web环境无关。如果把业务逻辑代码放到Action中,那么必然导致业务逻辑与Web环境相关,业务逻辑与Web应用环境相捆绑了,这样不利于代码的可重用性和移植。
因此,对于大型应用来说,如果真正要做到model与控制器的分离,就不能把有关的业务逻辑代码放到Action里,Action应该只执行“决定做什么”,而不是“怎么做”,Action执行的是控制器的功能,Action充当用户请求和业务逻辑处理的适配器。对于一些小型应用来说,不考虑重用的话,Action类本身也可以完成一些实际的业务逻辑。
(3)从应用软件分层的角度说,要保证各层的独立和自治,就不能调用高层的API。看看import,就知道写的代码时候真正分层,真正可移植,易维护。