【问题标题】:Can you have too many models in a PHP mvc?PHP mvc 中可以有太多模型吗?
【发布时间】:2012-05-02 16:15:11
【问题描述】:

我目前正在为我运行的网站创建自己的 PHP mvc,以便它只包含所需的代码,尽可能轻巧快速。

该站点具有相当多的功能和用户特性,因此要确定哪些操作在哪些模型中由哪些控制器控制开始变得相当复杂。

示例

假设我有以下会员特征

  • 收藏夹
  • 朋友
  • 历史

每个都可以由 membercontroller 控制,但我的问题是是将它们全部放在一个模型中还是每个模型都包含在一个模型中。

这三个中的每一个都有很多动作,例如:

  • 添加到收藏夹
  • 删除收藏夹
  • 显示收藏夹
  • 添加到历史记录
  • 删除历史记录
  • 显示历史记录
  • 加为好友
  • 删除好友
  • 给朋友发消息

...等

目前我认为为每个人(最爱、朋友、历史)创建一个模型可能是最好的方法,但它会达到模型过多的地步吗?

目前整个站点有6个控制器,17个模型和25个视图

【问题讨论】:

  • 在这种情况下,“模型”是什么意思?数据库实体?数据库实体组?还有什么?
  • 与某个站点功能/组相关的每组操作的模型类型。因此,memberactions 可以是一个模型,或者 favourites/friends/history 都可以是单独的模型而不是 memberactions。
  • @Silver89:MVC 中的模型通常是数据的抽象层。我认为收藏夹是与朋友不同的一组数据,您可能希望对其执行不同的操作(阅读:收藏夹模型可以告诉您/做不同于朋友模型的事情)

标签: php model-view-controller oop


【解决方案1】:

是的,从技术上讲,您可以拥有太多的模型,PHP 中可以存在的类的数量(一如既往)是有限制的。但它相当大,所以继续前进。您不仅可以同时拥有许多模型,而且还可以拥有不同类型的模型。因此,请继续前进,不要因为认为可能存在到目前为止您还没有看到的限制而限制您的编码。

所以不是文件的数量,而是你的代码写得有多好,例如所有属于一起的东西是否正确分组?另见Domain Model

【讨论】:

    【解决方案2】:

    我建议您让ModelController 处理以某种方式修改Model 的操作。

    FavoritesController 处理添加、删除和显示收藏夹(存储在FavoritesModel)。使您的控制器保持精简/苗条,更容易测试(更少的方法)并将逻辑应用程序部分保持在一起。

    此外,您可以将应用程序分成较小的应用程序,分别处理:

    • 授权/登录
    • 社交/分享
    • 添加/阅读/显示文章(主应用)

    【讨论】:

    • 所以对于mvc,只要结构简单易懂且合理,你有多少文件并不重要? vs 尽可能多地组合在一起?
    • MVC 将每个应用程序部分执行的任务分开。 IE。视图只知道如何“渲染”特定模型。现在,假设您有一个输出html 的视图和一个输出json 的视图。您可以根据自己的喜好编写代码(一个文件、两种方法或两个文件或具有通用功能的抽象视图和扩展它的两个具体视图)。就许多文件而言,我想说你不用担心文件太多,这可能是你首先重构应用程序的原因;)
    • 视图只应与视图模型交互,而不应与域或数据库模型交互。
    • @hakre:我从来没有具体说明我指的是哪种型号:)
    • @hakre:otoh,我认为您更准确地说是指 MVVM(模型、视图、视图模型,类似于 knockout.js)模式,这不是问题所在;)
    【解决方案3】:

    在这种情况下,没有“正确”的答案,所以我只能给你我自己的解释。我会使用一项服务将一个或多个模型绑定在一起。因此,用户服务将使用用户模型和收藏模型来操作和显示用户收藏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      相关资源
      最近更新 更多