【发布时间】:2016-01-25 14:23:29
【问题描述】:
大型项目中Spring MVC中控制器的实际任务是什么? 他们应该
- 获取用例特定数据,对其执行与视图相关的逻辑并将其传递给视图。大型控制器,JSP 中的表示逻辑更少
- 获取所有可能需要的数据,并将一些具有惰性方法的 DTO 传递给视图、小型控制器、大型 JSP
假设我们有一个在线商店并且想要实现 showProduct()。 我们有相当多的显示逻辑取决于某些 DTO 的某些属性。比如在JSP中我们经常有一些等价于这个的显示逻辑
<c:if test="${product.isSameDayPickupSupported && warehouse.stock > 10 && configuration.sameDayPickupEnabled && !soldOut}">
<div class="sameDayPickup">some HTML goes here</div>
</c:if>
在我看来,这是将这个逻辑从 JSP 中拉出并让控制器处理的候选方案。最后,我们将在 JSP 中有这个:
<c:if test="${sameDayPickup}">
<div class="sameDayPickup">some HTML goes here</div>
</c:if>
【问题讨论】:
-
我同意选项 1 是更好的选择。此外,尝试将尽可能多的“业务”逻辑放在控制器之外的层中。例如,如果使产品“下线”需要对外部服务进行三次调用,则将这三个调用放入控制器调用的新层中。
-
你应该把你的
business-logic放在service层。另外,您能否用简短而准确的词语更恰当地重新构建您的问题。 -
嗨@WeareBorg - 我重新提出了我的问题,希望能澄清我的意图。谢谢
-
大项目或小项目,控制器的任务保持不变。您可以将数据分解为多个部分,并可以通过控制器提供服务,但我仍然不明白您想知道什么。此外,这些天来,不仅有 JSP,开发人员使用 JS 等作为前端,但同样,除了从控制器方法获取数据之外,这与控制器有什么关系。
-
嗨,我认为我的代码示例会很清楚。我指的只是显示逻辑。
标签: spring spring-mvc model-view-controller