@Alzasr

Какой кейс или паттерн лучше использовать для защищенного кода при блокировке таблицы?

Потребовалось выполнять защищенный код с блокировкой таблицы (в частности очередь, но не только).
использую такой кейс:
public function foo(){
    $this->lockTable();
    try{
         //Что-то делаю, что может вызвать исключение
    }catch(Exception $e){
        $this->unlockTable();
        throw $e;
    }
    $this->unlockTable();
}


Приходится этот код повторять во всех местах, где нужно такое поведение. Какие есть кейсы или паттерны для данной задачи? Пока писал, на ум пришел вариант с замыканием, что-то вроде такого:

class parentClass{
     public function lockTable(){...}
     public function unlockTable(){...}
     public function safeLockAndExecute(Closure $closure){
         $this->lockTable();
         try{
             $closure();
        }catch(Exception $e){
            $this->unlockTable();
            throw $e;
        }
        $this->unlockTable();
     }
}


Может есть еще какие кейсы?
  • Вопрос задан
  • 2281 просмотр
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Если речь о БД, то блокировка требуется только для метода выполняющего запрос, остальные методы-запросы вызывают его в своем коде т.е. метод поиска последних новостей вызывает метод запроса и передает в него параметры.
Вариант с замыканиями будет сложнее в реализации.
Ответ написан
@Alzasr Автор вопроса
Видимо придется использовать тот кейс, что я использую. С замыканием код будет сложнее читать, ИМХО.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы