Репозиторий осуществляет выборку данных по средством 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{
$data;
function getAll(){}
functions save(){}
}
class PostsDBPesistence implements Presistence{
$db;
function getAll(){}
functions save(){}
}
На мой взгляд надо убрать логику условия и сохранения из контроллера. Вопрос куда?
Общепринятая практика - разделение на Сущность, Репозиторий, Сервис и, при необходимости, Контроллер.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть файл gophp, в котром стоит перенаправление на другой сайт
У меня есть модель объявлений Ad, модель тегов Tag и реализованная связь 'многие ко многим' между ними