[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как переписать множество 'if' условий в ООП
Страницы: 1, 2, 3
chee
Ну и вот еще книга http://www.ozon.ru/context/detail/id/4884925/, я о ней не знал, когда изучал паттерны, потом когда нашел её, пролистал и сделал вывод, что она довольно годная. Надо будет ПМ попросить заказать ее в библиотеку компании.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
SlavaFr
Chain of responsibility pattern может заменить длинные цепочки if запросов.
Приимущество в том, что создание последовательности цепочки можно перенести в конфигурацию, то есть фактически создавать последовательность if запросов в конфигурации, а не в коде, что уменьшит затраты для unit-tests. Недостаток, огромная возня связаная с создания нового класса для каждого if-запроса и обязательное использование конфигурируемого Dependency injection container.

То есть для того, что бы удивить работадателя вполне нормальное предложение. Для реального применения требует определённой квалификации сотрудников и подходящих фрамеворков. smile.gif

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
docentovich
Цитата (acerrusm @ 21.03.2016 - 21:53)
Так как же все таки 'правильно' переписать такой код?

я бы сделал так (прошу сильно ен пинать в ООП я всего пару недель):


class someClass{
public function validate($label, $type, $validators, $data)
{

if ($validators != false)
{
foreach ($validators as $name) {
if($validator = ValidatorsFactory::factory($name)){
$validator->data($data);
$validator->label($label);
$validator->validate();
}
}
}


}
}


class ValidatorsFactory{

public static function factory($name){
if(!class_exists($name)) return null;

return new $name;
}
}


abstract class Validators{
private data = '';
private label = '';

public function data($data){
$this->data = $data;
}

public function data($label){
$this->label = $label;
}

abstract public function validate(){}
}


class validateFuture extends Validators{



public function validate(){
/* собстывенно процесс валидации */
}

}



class aboveZero extends Validators{


public function validate(){
/* собстывенно процесс валидации */
}

}




при такой схеме досточно добавить новый класс валидации
Быстрый ответ:

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