最佳实践PHP MVC问题

时间:2009-08-05 02:28:04

标签: php model-view-controller codeigniter

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

  

$ month = array('blank','blank','day1'=> array(event 1,event2),'day2'=> ...);

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

我可能会设计它以便它可以“双向”工作。模型的输出应该是标准化的数组,可能是:

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

即。只是纯数据。

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

我不知道为什么你的例子中的前两个条目是'空白'。如果您的阵列已经表示日历表中显示的月份,那么这将违背MVC。此类演示文稿问题将在视图中进行考虑。