Cache layer for MVC - Model or controller?
- by Industrial
Hi everyone,
I am having some second thoughts about where to implement the caching part. Where is the most appropriate place to implement it, you think?
Inside every model, or in the controller?
Approach 1 (psuedo-code):
// mycontroller.php
MyController extends Controller_class {
function index () {
$data = $this->model->getData();
echo $data;
}
}
// myModel.php
MyModel extends Model_Class{
function getData() {
$data = memcached->get('data');
if (!$data) {
$query->SQL_QUERY("Do query!");
}
return $data;
}
}
Approach 2:
// mycontroller.php
MyController extends Controller_class {
function index () {
$dataArray = $this->memcached->getMulti('data','data2');
foreach ($dataArray as $key) {
if (!$key) {
$data = $this->model->getData();
$this->memcached->set($key, $data);
}
}
echo $data;
}
}
// myModel.php
MyModel extends Model_Class{
function getData() {
$query->SQL_QUERY("Do query!");
return $data;
}
}
Thoughts:
Approach 1:
No multiget/multi-set. If a high number of keys would be returned, overhead would be caused.
Easier to maintain, all database/cache handling is in each model
Approach 2:
Better performancewise - multiset/multiget is used
More code required
Harder to maintain
Tell me what you think!