Репозиторий осуществляет выборку данных по средством Persistence. Есть два Persistence . Например memoryи databese. Может даже есть memcahed.
Где нужно воткнуть условие что если memory Persistence вернул 0 то тогда иди к databese Persistence?
И ещё более важно в каком месте осуществиться кеширование из db в memory Persistence. Вернее где это делить правильнее с точки зрения ООП.
Приблизительный код:
class MyController{
function postsAction(){
$memoryRepository = new PostsRepository(new PostsMemoryPesistence());
if( empty( $posts = $memoryRepository->getAll() ) ) {
$posts = (new PostsRepository(new PostsDBPesistence()))->getAll();
$memoryRepository->save( $posts )
}
}
}
class PostsRepository{
function __constructor(Presistence presistence){
this->presistence = presistence;
}
function getAll(){
return this->presistence->getAll();
}
function save( Posts[] $posts ){
foreach($posts as $post){
this->presistence->save( $post );
}
}
}
interface Presistence{
function getAll();
functions save();
}
class PostsMemoryPesistence implements Presistence{
$posts;
function getAll(){}
functions save(){}
}
class PostsDBPesistence implements Presistence{
$db;
function getAll(){}
functions save(){}
}
На мой взгляд надо убрать логику условия и сохранения из контроллера. Вопрос куда?