关于Php中MVC的快速问题

关于Php中MVC的快速问题,php,model-view-controller,frameworks,Php,Model View Controller,Frameworks,目前,我正在重组现有的代码库。我不熟悉php框架,但我知道MVC是如何工作的 现在,有一个控制器文件、一个模型文件和三十个视图文件 每个模型都应该对应一个表吗 每个视图都应该对应一个html页面吗 控制器呢?我怎样才能把这个千行怪兽分解成更有条理的代码呢 谢谢。每个模型都应该对应一个逻辑数据对象-通常主要存储在一个表中(通常将外键存储到其他表中,因为模型通常需要引用其他模型) 每个视图都应符合查看数据的逻辑方式(例如,在stackoverflow上,希望有一个用于显示徽章页面列表的视图,一个用于

目前,我正在重组现有的代码库。我不熟悉php框架,但我知道MVC是如何工作的

现在,有一个控制器文件、一个模型文件和三十个视图文件

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

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

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


谢谢。

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

每个视图都应符合查看数据的逻辑方式(例如,在stackoverflow上,希望有一个用于显示徽章页面列表的视图,一个用于显示标签页面列表的视图等)

每个控制器都应该对应于视图的逻辑分组,该分组不应该太大(文件变得不可管理的那一行太大-如果您有30个视图,您可以找到一种逻辑方式将它们分组到3个控制器中)

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

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

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

听起来不是陈词滥调,但每个视图都应该对应一个视图。我不知道你说的“页面”到底是什么意思

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

  • 头衔
  • 姓名
  • 出生日期
  • 用户名
  • 地址
  • 电子邮件地址
  • 电话号码
现在,这些数据可能位于多个表中。例如:当事人、人员、联系人和地址

可能会有几种观点:

  • 关于页面
  • 表单页面(用于新注册,可能用于编辑详细信息和错误)
  • 成功页面
  • 失败页面
通常,所有这些都将由一个控制器处理,因为所有过程都是相互关联的

控制器呢?我怎么能 把这个千线怪物分成 更有组织的代码

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

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

不必这样做,但这通常取决于业务逻辑的复杂性

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

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

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

再说一次,它不一定非得这么做,但通常会这样做

控制器呢?我怎么能 把这个千线怪物分成 更有组织的代码

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

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

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


希望这能有所帮助。

所以需要1000行控制器?如果一个控制器需要1000行来注册用户,那么,你做错了。