【问题标题】:Using MVC patterns in Java在 Java 中使用 MVC 模式
【发布时间】:2013-02-15 09:29:30
【问题描述】:

我刚刚开始在我的 Java 应用程序中使用 MVC 模式。我之前在 CodeIgniter 中使用过一点 MVC,但我想确保我能做对。

  • 视图是 GUI 文件,它将输入发送到控制器。

  • 然后控制器接收这些输入,并最终将它们发送到模型。

在我的 CodeIgniter 应用程序中,我使用的所有模型都是与数据库相关的东西。例如,如果我需要验证电子邮件,我应该在 Controller 中还是在 Model 中进行验证?

【问题讨论】:

  • 我不是 MVC 方面的专家,但对我来说这似乎是一个控制器任务,因为控制器的工作是将视图的输入转换为模型可以理解的内容。因此,验证用户输入并对其进行清理,以便模型可以使用/发送/解析/任何听起来像“控制器”的东西。
  • 我删除了你的最后一段,希望这个问题不会因为“没有建设性”而被关闭。
  • 请注意,您使用的是 Apple 的 MVC 版本,它与原始版本略有不同:oracle.com/technetwork/articles/javase/mvc-136693.html(您必须滚动到“修改 MVC 设计,或者 Ctrl+F,然后选择“Apple” )。
  • 您可能需要考虑将Model-View-Presenter (MVP) 作为替代方案。我个人更喜欢它,因为它将所有业务逻辑推入 Controller。

标签: java model-view-controller design-patterns


【解决方案1】:

在哪里进行验证是一个在 MVC 模式中仍有待讨论的问题。

可以而且应该在视图上进行一些琐碎的验证。示例:采用数值的文本输入小部件甚至不应该允许用户输入字母。它不必咨询控制器或模型来执行此操作。

有人说控制器的工作是确保它不会向模型提供垃圾,因为决定什么是有效的,什么是无效的是业务逻辑的一部分。

有人说模型的工作是确保其自身的一致性,因此它应该验证来自控制器的所有内容并拒绝任何垃圾数据。

tl;dr: 视情况而定。

【讨论】:

    【解决方案2】:

    客户端验证必须包含在视图中,而服务器端验证与您的场景有关,Controller 最适合这项工作。模型只能用于做一些业务逻辑和数据库流程。

    【讨论】:

      【解决方案3】:

      来自MVC模型

      • View 负责在您的应用程序和外部之间充当接口/端点,通常它是某种形式的 GUI
      • 控制器代表调度部分,应该保持简洁
      • 模型处理业务逻辑、与数据库对话等。

      关于您关于电子邮件验证的问题,您应该在两个地方进行,通过 javascript 在视图/GUI 中,以确保在用户输入错误的电子邮件地址的情况下获得快速而漂亮的反馈,并避免您无用的打击。但除此之外,您还必须在服务器端的某个地方进行操作。实际的逻辑将在模型层中,类似 isValidEmail(String emailAddress) 的方法返回一个布尔值,并在模型中的某处声明并从控制器调用。我在想一些类似的事情:

          public void myAction() {
             //we are in the controller
             if(!Manager.isValidEmail(emailAddressAsString)) {
                dispatchBadEmailView(); //dispatch to a bad email address view
             }
          }
      

      这是我的意见,如果您还没有,请尝试使用 Spring MVC 或类似的东西,这很有帮助,请在此处阅读更多信息:http://www.mkyong.com/tutorials/spring-mvc-tutorials/

      【讨论】:

        猜你喜欢
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        相关资源
        最近更新 更多