大型项目中Spring MVC中控制器的实际任务是什么? 他们应该
让我们说我们有一个在线商店,并希望实现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>
答案 0 :(得分:1)
都不是。您的视图应该尽可能地愚蠢(例如,您应该能够轻松地为它们提供虚拟数据以进行开发),并且您的控制器应该是HTTP前端(HTML / JSON / XML)和服务层之间的薄层。包含您的所有业务逻辑。这使得对业务逻辑和控制器的测试变得简单,并确保您可以在前端的多个变体中可靠地重用业务逻辑。
在这种特定情况下,确定是否提供某个送货选项的规则肯定属于服务层(服务对象或域对象上的方法,具体取决于组织上最有意义的内容)。该逻辑不应该被复制到控制器或视图中。