2013-02-15 39 views
1

我刚开始在我的Java应用程序中使用MVC模式。我之前在CodeIgniter中使用过MVC,但是我想确保我能够正确地使用MVC。在Java中使用MVC模式

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

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

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

+0

我不是MVC的专家,但对我来说,它好像是一个控制器任务,因为控制器的工作是将输入从视图转换为模型可以理解的内容。因此验证用户输入并对其进行消毒,以便模型可以使用/发送/解析/无论它听起来像是“控制器”。 – 11684 2013-02-15 09:31:18

+0

我删除了最后一段,希望将此问题从“非建设性”中解决。 – 2013-02-15 09:31:47

+0

注意您使用的是Apple的MVC版本,它与原始版本略有不同:http://www.oracle.com/technetwork/articles/javase/mvc-136693.html(您必须滚动到'修改MVC设计或Ctrl + F然后选择'Apple')。 – 11684 2013-02-15 09:35:12

回答

3

在哪里做验证是一个问题,仍然可以在MVC模式中讨论。

一些微不足道的验证可以并且应该在视图上完成。例如:一个带有数值的文本输入小部件甚至不应该允许用户输入字母。它不必咨询控制器或模型来做到这一点。

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

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

tl; dr:这取决于。

0

从MVC模型

  • View负责代理您的应用程序和外部之间的接口/结束点,最常见的是某种
  • 控制器代表调度部分的图形用户界面,并应保持相当轻
  • 模型对待你的业务逻辑,会谈到DB等

关于你有关的电子邮件确认问题,你应该这样做我n两个地方,通过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/

1

客户端验证必须包含在View中,而服务器端验证有关像您这样的场景,Controller最适合这项工作。模型必须仅用于执行一些业务逻辑和数据库进程。