PHP MVC 最佳实践

问题描述 投票:0回答:2

我正在使用 CodeIgniter 在 PHP 中创建一个日历应用程序。在主日历页面中,我的模型当前创建一个数组,每个索引都是当月的某一天。那一天是一个数组,包含用户在这一天可能发生的任何事件。现在,我应该首先在控制器中构建日历数组,然后将其传递给模型,以便模型可以访问数据库并填写所有事件,还是应该创建日历数组并填写模型中的所有事件?

$month = array( 'blank', 'blank',  'day1' => array( event 1, event2), 'day2' => ... );
php model-view-controller codeigniter
2个回答
1
投票

这是一个很难的问题,我不确定每个人都会这样做......但这是我认为应该考虑的问题:

  • 如果要从应用程序的多个部分使用模型的方法(例如,已经调用它的控制器、批处理程序和 SOAP Web 服务接口),这可能意味着从多个控制器方法调用,问题是:你想要的数组是什么样的?
    • 如果每次都需要始终包含相同的内容(“完整数组”),那么为了避免复制粘贴,您应该将代码放入模型中
    • 如果它只需要在一种情况下包含“完整的东西”,那么,您的“特殊代码”可以位于控制器中——或者在另一个模型方法中,在这种特殊情况下,将在控制器中调用该方法,并且调用现有的获取数据。
    • 另一种方法是在控制器和模型之间添加一层...毕竟可能不是一个坏主意...
  • 如果仅当您正在讨论的代码被执行时数组才被视为“整体”,那么,我认为将该代码放入模型中是有意义的
  • 如果该代码是某些业务逻辑规则的一部分,那么它在模型层中占有一席之地;另一方面,如果它只与演示相关,那么它的位置将在视图中。
  • 如果你的 Model 方法被称为“
    getData
    ”,它应该只返回包含“真实”数据的数组,而不是包含“空”天的数组;另一方面,如果它被称为“
    getEventsByDay
    ”,那么让它每天返回一些东西是有意义的,即使是空的
  • 您应该尝试为您的模型方法提供一个一致的接口:如果保存数据的方法采用某种数组,那么从数据库加载数据的方法应该返回相同类型的数组;像
    $model->save($model->load())
    这样的东西应该有用,我的意思是

最终,没有“好的答案”:“这取决于”^^

我真的不知道在你的情况下我会做什么;我想这有点取决于应用程序的其余部分......我会问自己的问题是“空的一天的概念对我的模型有意义吗,还是只是一个演示问题?”


0
投票

我可能会将其设计为“双向”。模型的输出应该是标准化数组,可能类似于:

array('2009-08-05' => array('event' => ..., ...), '2009-08-06' => array(...));

即只是纯粹的数据。

默认情况下,它可以输出当前月份,或从现在到 +1 个月之间的所有内容。不过,它也应该需要一个参数来改变默认行为。采用日期数组或范围。

我不知道为什么你的例子中的前两个条目是“空白”。如果您的数组已经代表日历表上显示的一个月,那么这将违背 MVC。此类呈现问题应在视图中考虑。

© www.soinside.com 2019 - 2024. All rights reserved.