Camada de cache para MVC - Modelo ou controlador?
Estou pensando duas vezes sobre onde implementar a parte do cache. Onde é o local mais apropriado para implementá-lo, você acha?
Dentro de cada modelo, ou no controlador?
Abordagem 1 (código psuedo):// 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;
}
}
Abordagem 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;
}
}
Pensamentos:
Abordagem 1:
Nenhum multiget / multi-set. Se um número alto de chaves for retornado, a sobrecarga será causada.
Mais fácil de manter, todo o manuseio de banco de dados / cache está em cada modelo
Abordagem 2:
Melhor desempenho - multiset / multiget é usado
É necessário mais código
Mais difícil de manter
Me diga o que você acha!