【发布时间】:2010-12-09 22:22:24
【问题描述】:
我正在用 PHP 实现一个超轻量级的 MVC 框架。从数据库、文件等加载数据似乎是一个普遍的观点,应该独立于模型,我同意。我不确定是将这个“数据层”链接到 MVC 的最佳方式。
Datastore 与 Model 交互
//controller
public function update()
{
$model = $this->loadModel('foo');
$data = $this->loadDataStore('foo', $model);
$data->loadBar(9); //loads data and populates Model
$model->setBar('bar');
$data->save(); //reads data from Model and saves
}
控制器在模型和数据存储之间进行中介
看起来有点冗长,需要模型知道数据存储存在。
//controller
public function update()
{
$model = $this->loadModel('foo');
$data = $this->loadDataStore('foo');
$model->setDataStore($data);
$model->getDataStore->loadBar(9); //loads data and populates Model
$model->setBar('bar');
$model->getDataStore->save(); //reads data from Model and saves
}
数据存储扩展模型
如果我们想保存一个扩展数据库数据存储到平面文件数据存储的模型会发生什么?
//controller
public function update()
{
$model = $this->loadHybrid('foo'); //get_class == Datastore_Database
$model->loadBar(9); //loads data and populates
$model->setBar('bar');
$model->save(); //saves
}
模型扩展数据存储
这允许模型可移植性,但这样扩展似乎是错误的。此外,数据存储无法使用模型的任何方法。
//controller extends model
public function update()
{
$model = $this->loadHybrid('foo'); //get_class == Model
$model->loadBar(9); //loads data and populates
$model->setBar('bar');
$model->save(); //saves
}
编辑:模型与 DAO 通信
//model
public function __construct($dao)
{
$this->dao = $dao;
}
//model
public function setBar($bar)
{
//a bunch of business logic goes here
$this->dao->setBar($bar);
}
//controller
public function update()
{
$model = $this->loadModel('foo');
$model->setBar('baz');
$model->save();
}
非常感谢您对“最佳”选项或替代选项的任何意见。
【问题讨论】:
标签: php model-view-controller frameworks