【问题标题】:Quick question about MVC in Php关于 PHP 中 MVC 的快速问题
【发布时间】:2010-12-12 22:02:38
【问题描述】:

目前,我正在重组现有的代码库。我是 php 框架的新手,但我大致了解 MVC 的工作原理。

目前,有 1 个控制器文件、1 个模型文件和 30 个视图文件。

每个模型都应该对应一个表吗?

每个视图都应该对应一个html页面吗?

控制器呢?我怎样才能把这个千行怪物分解成更有条理的代码。

谢谢。

【问题讨论】:

    标签: php model-view-controller frameworks


    【解决方案1】:

    每个模型都应该对应一个表吗?

    没有。模型通常由来自多个来源的数据构建。不要考虑将其与您的物理数据库结构联系起来,即使最终可能会有很多相似之处。

    每个视图都应该对应一个html页面吗?

    听起来并不老套,但每个视图都应该对应一个视图。我不确定您所说的“页面”到底是什么意思。

    也许一个例子会很有用。想象一个用户注册页面。该模型是用户,可能包含以下字段:

    • 标题
    • 名字
    • 姓氏
    • 出生日期
    • 用户名
    • 地址
    • 电子邮件地址
    • 电话号码

    现在,这些数据可能位于多个表中。例如:Party、Person、Contact 和 Address。

    大概会有几个视图:

    • 关于页面
    • 表单页面(用于新注册和可能编辑详细信息以及错误);
    • 成功页面;
    • 失败页面。

    通常所有这些都将由单个控制器处理,因为所有过程都是相互关联的。

    【讨论】:

    • 那么千线控制器是应该的吗?
    • 如果控制器需要 1000 行来注册用户,那么你做错了。
    【解决方案2】:

    每个模型都应该对应一个逻辑数据对象 - 通常应该主要存储在一个表中(通常与其他表的外键一起使用,因为模型通常需要引用其他模型)。

    每个视图都应与查看数据的逻辑方式相对应(例如,在 stackoverflow 上,希望有一个用于标记页面列表的视图、一个用于标记页面列表的视图等)。

    每个控制器都应对应于视图的逻辑分组,该视图不应太大(其中 太大 是文件变得难以管理的行 - 如果您有 30 个视图,您希望能找到一种合乎逻辑的方法将它们分组为 3 个控制器)。

    【讨论】:

      【解决方案3】:

      控制器呢?我怎样才能 将这千行妖兽分解成 更有条理的代码。

      看看CakePHP 框架以及它如何解决大型模型、控制器和大量视图的问题。我觉得它很优雅。复杂模型可以有行为。大型控制器可以分解为组件。许多视图都用 layouts 分组,同时将公共位分隔为 elements。一开始可能听起来很复杂,很吓人,但一旦你尝试使用它,它就会真正到位。

      【讨论】:

        【解决方案4】:

        每个模型都应该对应一个 桌子?

        这不是必须的,但通常取决于您的业务逻辑的复杂性。

        由于您要重构现有应用程序,请考虑其他层如何使用该模型。在 MVC 中,模型位于依赖堆栈的底部。

        视图将如何访问模型?控制器将如何修改它?模型将如何填充?

        是否每个视图都对应一个 html页面?

        同样,它不是必须的,但它经常会。

        控制器呢?我怎样才能 将这千行妖兽分解成 更有条理的代码。

        一种常见的策略是使用前端控制器模式。前端控制器处理 HTTP 请求、应用程序初始化和站点范围的逻辑(就像你的千行怪物目前正在做的那样) - 但随后它委托给更专业的控制器。

        这些专用控制器可以按其使用的模型、站点页面结构或任何其他看起来合乎逻辑的内容进行分组。然后他们与模型交互并选择要显示的视图。

        最后,正如 Leonid 建议的那样,对框架 +1。即使您最终没有使用,也有一些很棒的控制器模式实现。

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-11
          • 1970-01-01
          • 2022-09-24
          • 2021-08-06
          • 2011-07-25
          • 2021-09-16
          相关资源
          最近更新 更多