Как убрать дублирование процедурного кода?

Пишу на php api с использованием slim framework. С помощью GET- получаем значения для различных сущностей сохраненных в базе данных, а с помощью POST - изменяем. Соответственно разница между всеми этими сущностями - Таблица в базе данных, другие поля и возможно внедрение некоторой логики: если в поле значение < n, то нельзя менять или поменять в другом месте.

Весь код представляет шаблон, где XClassName - разное название классов:


<?php
interface iXClassName
{
    public function get_permition_for_operation();
    public function validate_input_get_array( $some_input_param);
    public function get_value_to_rend();
}

class XClassName implements iXClassName{

}

require 'Slim/Slim.php';

$app = new \Slim\Slim();

$app->get('/api/get/XClassName/(:id)', function ($id) use ($app,$DBH) {

  $XClassName->get_permition_for_operation();
  $XClassName->validate_input_get_array( $some_input_param);
  $_params_array=$XClassName->get_value_to_rend();

   return $app->render('template_get_XclassName.tml', $_params_array ));
});


$app->post('/api/post/XClassName/(:id)', function ($id) use ($app,$DBH) {
 $XClassName->get_permition_for_operation();
 
 $_post_array=array('XparamName'=> $app->request->post('paramName'), 'Yparam'=>  $app->request->post('paramY'),...);
 $XClassName->validate_post_input($_post_array);
$XClassName->simple_logic();
 $XClassName->save_to_storage();


   return $app->redirect('/api/post/XClassName/');
});

$app->run();

?>

Соответственно когда появляется новая функция, которую нужно внедрить во всех вызовах api - поместить внутрь каждого блока $app->post() / $app->get() - можно забыть/ошибиться

Хотелось бы услышать мысли по поводу правильного проектирования такого сервиса.

ЗЫ: Я думаю заменить это все паттерном Стратегия, но правильно ли это?

  • Вопрос задан
  • 2723 просмотра
Пригласить эксперта
Ответы на вопрос 2
@timathecue

А как Вам такая возможность? http://docs.slimframework.com/#Route-Middleware

Ответ написан
afiskon
@afiskon

Дублирование кода убирается очень просто - повторяющиеся куски выносятся в функции/процедуры, а изменяемые передаются в качестве аргументов. Особенно тут помогают лямбда-функции (насколько я помню, в PHP есть аналог, как минимум, вызов по имени).

Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы