我使用的是spring-mvc,我的控制器包含了太多的逻辑。当3-5个服务bean构成业务流程并在一个处理程序中调用它们时,将包含一些验证,并导致一些if-else条件具有肯定或否定的响应。
一种可能的解决方案是拥有一个外观,其中包含对服务bean的所有引用及其方法的公共接口。这使得它变得更简单,它也可以构成MVC模式中的异常边界,但是业务流程仍然有一些逻辑和验证,它仍然在处理方法中处理。
我应该创建这样的东西吗?:
BusinessProcess {
processOrder() {
serviceBeanA.call();
result = serviceBeanB.call();
validator.validate(result); // throw exception
serviceBeanC.call(result);
}
}并且在我的处理程序中只使用BusinessProcess bean?捕获异常或返回值将说明错误所在以及响应中应包含的内容。否则,processOrder方法的内容将在处理程序中。
这条路对吗?如果是这样的话,这种模式是如何命名的。
发布于 2011-08-03 01:07:16
如果我理解正确的话,你很可能应该按照你的建议去做。我不认为这种“模式”有名字,也不需要有名字。既然你看起来不确定,这就是为什么我认为你在考虑正确的事情。
处理订单是您的处理程序感兴趣的逻辑抽象。OrderProcessorBean (或BusinessProcessImpl)如何实际实现这一点是一个实现细节,对处理程序/控制器是隐藏的。
如果没有这样的bean,您可以在一些控制器中编写一个方法processOrder,并且该控制器具有对处理处理订单细节的服务bean的依赖关系和引用。正如您所注意到的,这不是一个好的设计。
处理代码允许异常飞出,并且不关心调用者如何处理它们,这似乎也是正确的。也许事务被回滚,也许一些包含错误消息的HTML被提供给最终用户,但是负责处理订单的代码(业务逻辑)不应该知道有Spring MVC或HTML这样的东西。
https://stackoverflow.com/questions/6895362
复制相似问题