我正在根据我在 RailsConf 2009 上学到的东西重写我的应用程序。我知道模型、控制器和视图是相互关联的。但是,我一直在努力解决的一件事是控制器的“适当”级别。
如果 Rails 模型(大致)映射到数据库表......如果 Rails 视图(大致)映射到浏览器页面......
Rails 控制器映射到什么?
我正在根据我在 RailsConf 2009 上学到的东西重写我的应用程序。我知道模型、控制器和视图是相互关联的。但是,我一直在努力解决的一件事是控制器的“适当”级别。
如果 Rails 模型(大致)映射到数据库表......如果 Rails 视图(大致)映射到浏览器页面......
Rails 控制器映射到什么?
控制器是一种使用解决方案的逻辑、约束和条件将模型连接到视图的方法。
所以,我想它可以映射到你解决方案的“大脑”。
控制器实际上并没有映射到您正在寻找的上下文中的任何内容。您必须将控制器视为将模型与视图放在一起的粘合剂。
模型列出了您的数据。
视图列出了数据的表示。
控制器负责接受请求并检索正确的模型和视图……然后将结果呈现给用户。
每个人都想把它比作胶水或肌肉或其他东西,但它不适合其中任何一个,因为它是模型和视图之间的翻译器。肌肉不提供输入功能,只有输出、神经和感官提供该类比的输入。胶水只是将两个东西粘在一起,不会改变它们。
MVC 中的控制器层负责从模型中取出数据并将其转换为可供查看者显示的形式。一个完美的例子是三个不同的页面,它们都以相同(或非常相似)的形式呈现数据,但显示的数据来自非常不同的来源。在每种情况下,可能会使用相同的视图代码,但是控制器知道调用模型上的不同函数以获取要显示的数据并将其放入正确的集合名称中,以便视图可以找到并显示它,即使视图实际上不知道它正在显示什么。
但这不是控制器层的唯一任务,因为它还必须将用户的请求转换为模型上的操作。用户单击链接或在字段中键入内容或滑动滑块,这可能会转化为模型上的一个或多个操作。它不应该是做出决策的实际业务逻辑,但是如果您有一个复选框,上面写着“执行此操作 3 次”,但模型只有一个功能可以执行一次,则控制器将负责调用模型的功能 3执行操作的次数。
如果您必须进行类比,我会使用迈克尔对“大脑”的回答。
控制器是管理者或协调者。将模型和视图视为公司内的两个不同组(可能是销售和 IT)。控制器是坐在这两个之上的人,并确保他们一起玩得很好。
话虽如此,所有这些隐喻都会在某种程度上存在缺陷。例如,控制器通常确保用户在需要用户登录的页面上登录。这并不适合我的比喻或其他一些比喻。
控制器紧密映射到 URL,尤其是在使用 RESTFUL 资源时。
我喜欢将 URL 视为应用程序的命令行界面。
如果您正在寻找 MVC 的隐喻,它可以帮助我在开始时让事情变得更容易,我想到了这样的事情:
模型- 你的骨架(帮助构建事物的结构)
控制器- 你的肌肉(帮助一切运动并完成所需的任务)
视图- 你的外表(这就是世界如何看待其他两个部分所做的)
这是我自己想出的最简单的方法,让自己“得到它”希望它有所帮助。同样,这部分中的控制器将“映射”到为您的应用程序工作的任何东西。