【问题标题】:Spring MVC best practicesSpring MVC 最佳实践
【发布时间】:2015-09-11 04:45:02
【问题描述】:

我正在开发一个 Spring MVC Web 应用程序,我将 JPA 实体保存在存储库包中,dao 和控制器类保存在单独的包中,jsp 保存在 WEB-INF 的文件夹中。

我的问题是,在这个应用程序中,什么是模型,什么是控制器,什么是视图?我应该在哪里保留业务逻辑(dao 或控制器)?明确分离业务逻辑的最佳做法是什么?

【问题讨论】:

    标签: spring model-view-controller


    【解决方案1】:

    对于您所描述的,层如下:

    • 查看:JSP 文件
    • 控制器:DispatcherServlet(前端控制器)和您的控制器类
    • 模型:剩下的一切

    对于您问题的后半部分,您实际上是在寻求基于意见的答案。但以下似乎是一种常见的模式:

    如果你将业务逻辑放在控制器中,你会得到一个又胖又丑的控制器(只是在谷歌周围搜索)。即使 Spring MVC 给了你测试控制器的工具,常见的用法是避免它,因为控制器严重依赖框架,最好让业务逻辑尽可能独立于框架。永远不知道,您以后可能出于任何原因不得不使用不同的框架。

    出于同样的原因将业务逻辑放在 DAO 中同样糟糕:框架独立性。

    我的建议是在控制器和 DAO 之间添加一个服务层,真正的 CRUD 应用程序可能会出现异常。它是一个对框架依赖较少的层;实际上它通常不是由框架产生的原因:框架无法知道您的业务逻辑。服务类还有另一个原因,它是事务分界应该存在的 层:控制器几乎不支持 JDK 代理(这是 Spring 框架中的默认事务分界),它可能与调用更多相关比单个事务中的一种 DAO 方法。

    但我必须承认,以上是我的观点,而不是大事实(不仅是我的,而且绝对是一个观点)。您当然可以找到业务逻辑非常小以至于不需要开销或服务层的用例:这只是一种架构选择,只要您知道为什么做出选择,任何可能性都可以做个好人。

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2011-05-18
      • 1970-01-01
      • 2011-02-04
      • 2014-06-26
      • 2011-05-05
      • 1970-01-01
      • 2014-03-30
      • 2016-10-20
      相关资源
      最近更新 更多