【问题标题】:problem with project MVC structure项目MVC结构问题
【发布时间】:2010-08-18 04:46:30
【问题描述】:

在我的项目中,我有大约 20 个带有许多不同 <input> 的 html 表单。这个<input> 在每种形式中都是独一无二的,它们之间不会重复。对于每个表单,都有一个从表单获取数据、生成特定文件并将其推送到浏览器的脚本。就是这样。没有数据库、管理员、登录名/密码和其他常见的网络应用程序。

例如在 php 中,项目结构可以是这样的:

表格/

------->form1/

--------------->index.html

--------------->脚本/

----------->index.php

------->form2/

--------------->index.html

--------------->脚本/

----------->index.php

等等。这很清楚,它制作了漂亮的网址,例如:

www.website.com/forms/form1

但是在 Ruby-on-Rails 中有一个 MVC 模式。而且我不知道如何用这样的项目组织结构。如何使它正确?毕竟我不应该制作 20 个不同的控制器,对吧?

【问题讨论】:

    标签: ruby-on-rails ruby model-view-controller


    【解决方案1】:

    是的,您确实制作了 20 个控制器。就像您在 PHP 结构中拥有 20 个 script/index.php 文件一样。 rails 结构看起来像这样。

    应用程序/ 控制器/ form1s_controller form2s_controller ...... formns_controller 看法/ 表格1/ 新的.html.erb 表格2/ 新的.html.erb …… 形式/ 新的.html.erb 布局/ 应用程序.html.erb

    控制器对您要执行的每个操作都有一个方法,例如新建、编辑等

    layouts/application.html.erb 文件将包含所有页面中一致的所有标记。

    最后,不要试图与结构抗争。由于约定,它可以启用最少的代码,如果您尝试创建自己的结构,您将创造一个痛苦的世界。

    【讨论】:

    • 感谢您的回答。好吧,在我看到的每个教程/screecast 中,只有大约 3 或 4 个控制器。而且我认为 20、30 和更多的控制器只是糟糕的项目组织。那么,这正常吗?
    • 大多数教程/截屏视频本质上都是为了简化事情。您会期望应用程序的每个“区域”都有一个控制器,无论是没有数据库支持的单个表单,还是封装应用程序特定区域的一组表单。只有您会知道这一点,但肯定有许多 ROR 应用程序,其中的控制器比这多得多。例如 Redmine(A ROR 问题跟踪器github.com/edavis10/redmine/tree/master/app/controllers)有 40 多个控制器
    【解决方案2】:

    由于表单没有数据库后端,我将创建一个 FormsController,有 20 个方法(form1、form2、form3、...)。

    然后您的网址看起来几乎相同 \forms\form1\forms\form2 ...

    即使您将使用 20 个控制器,ruby 也有很多方法可以删除重复代码。所以即使在一个普通的 MVC 中,我也有 140 个模型的应用程序,同样的控制器也有很多,这些控制器中的大多数只有一行,并且视图是完全通用的。

    仅仅因为某个解决方案在 PHP 中看起来很简单,并不意味着不存在更好的解决方案。比如MVC。这似乎会导致更多的代码、更多的文件、更多的工作,但结构的存在是有充分理由的,它清晰地分离了关注点,并且每个文件本身变得更加清晰和易于理解。

    【讨论】:

    • 如果我将使用一个 FormsController,我如何为每个表单实现一个脚本?这些“脚本”相当大,看起来每个“脚本”方法都将放在同一个 FormsController 中,对吧?或者有一种方法可以为每个“脚本”使用单独的文件,就像在 php 中一样?
    • 在MVC中,有一个模型收集需要展示或编辑的数据。控制器检索正确的模型,并将它们交给视图。视图可以操纵模型并以正确的方式呈现它们。意图是视图尽可能简单。如果需要大量或复杂的操作来正确呈现数据,我们使用库或演示者或助手。从视图中,在提交时,用户输入的数据随后被发送回控制器进行处理。你能简单描述一下你的“脚本”是做什么的吗?所以我可以考虑一下。
    • 主要目标是根据表单输入的值获取一个特殊的文本文件。我写了一个类来更容易地制作这个“特殊格式的文本文件”,叫做 FileMaker。那么每个脚本到底在做什么呢?它以$filemaker = new FileMaker(); 开头,然后从表单中获取所有值,并依赖这些值在$filemaker 中执行某些操作。例如,if ($_GET['somecheckbox'] == true ? $filemaker->addProduct("some line") : $filemaker->addBlock('some block')。从 20 个脚本中制作一个 BIG 脚本是不可能的。这就是为什么我们需要为每个表单设置控制器,我认为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多