Где нужно в Repository подать другой Persistence по условию?

131
22 октября 2018, 13:10

Репозиторий осуществляет выборку данных по средством 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(){}
}

На мой взгляд надо убрать логику условия и сохранения из контроллера. Вопрос куда?

Answer 1

Общепринятая практика - разделение на Сущность, Репозиторий, Сервис и, при необходимости, Контроллер.

READ ALSO
Записать COOKIE на сайте для другого домена

Записать COOKIE на сайте для другого домена

Есть файл gophp, в котром стоит перенаправление на другой сайт

148
Добавление числа в int json

Добавление числа в int json

Как можно это реализовать?

118
Как сделать запрос для получения всех объявлений с определенными тегами в Laravel?

Как сделать запрос для получения всех объявлений с определенными тегами в Laravel?

У меня есть модель объявлений Ad, модель тегов Tag и реализованная связь 'многие ко многим' между ними

150
Вопрос о Google Distancematrix

Вопрос о Google Distancematrix

Правильно работающий запрос стал выдавать следующее сообщение:

120