[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фасад моделей
Страницы: 1, 2
Traveller
Добрый вечер. Я использую паттерн фасад, создавая фасад моделей, который в себе обьеденяет работу со всеми моделями.
И есть в нем следующая функция:

public function editEvent($action,$idEvent,$time=null,$dateSearch=null,$specific=null,$employerId=null,$forAll=null)
{
$edit = $this->objFacade->getObj('DetailsEvent','model',$this->objFacade);
switch ($action)
{
case 'select':
$result = $edit->selectEvent(array($idEvent));
$specificCheck = $result[0]['specific'];
$textValid = $this->objFacade->getObj('TextValid','model');
$specificValid = $textValid->deValidateHtml($specificCheck);
if ($specificValid)
{
$result[0]['specific'] = $specificValid;
}
break;
case 'delete':
$result = $edit->delEvent(array($idEvent));
break;
case 'deleteAll':
$result = $edit->delEvent(array($idEvent),true);
break;
case 'edit':
$timeValid = $this->objFacade->getObj('TimeValid','model');
$time = $timeValid->encodeTime($time);
if ($time)
{
$result = $edit->updateEvent($idEvent,$time,$dateSearch,$specific,$employerId,$forAll);
if (!$result)
{
$this->objFacade->setDataRes('EVENT_EDIT','You wrote incorrect values');
}
}

else
{
$this->objFacade->setDataRes('EVENT_EDIT','You wrote incorrect time');
$result = false;
}
break;

}
return $result;
}

Как видно, я первым аргументом передаю то, что функция должна делать: либо выбирать инфу из бд, либо что-то удалять либо редактировать.
Однако такой вариант не совсем хорош, ибо по мере увеличения кода, увеличивается и количество условий для switch - case. Я думал сделать нечто вроде такого:
назвать методы в моделях так же как и $action (аргументы для свитча) и сделать унивесальный вызов что-то то вроде :

$method = $action;
$obj->$method(...);

Но! Загвоздка в том, что для каждого рода действия : select, delete,deleteAll,edit; Мне надо вызывать разное колличество моделей. Например для селекста и эдита вызвать какие-то валидаторы, после чего в зависимости от возвращенного значения, вызвать модели, которые уже занимаются непосредственно вычислением. Тоесть мой вариант накрывается медным тазиком, так как мне опять таки прийдется делать свитч кейс и сверяться с родом действия.
Вопрос: Как еще можно это оптимизировать ?
Спасибо.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.