Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 2 [3]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как переписать множество 'if' условий в ООП
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 2 дня
Карма: 40




Ну и вот еще книга http://www.ozon.ru/context/detail/id/4884925/, я о ней не знал, когда изучал паттерны, потом когда нашел её, пролистал и сделал вывод, что она довольно годная. Надо будет ПМ попросить заказать ее в библиотеку компании.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 4 дня
Карма: 104




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

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


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
docentovich  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 32
Пользователь №: 42772
На форуме: 8 месяцев, 4 дня
Карма:




Цитата (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(){
/* собстывенно процесс валидации */
}

}




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

Это сообщение отредактировал docentovich - 10.06.2016 - 15:01
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
docentovich  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 32
Пользователь №: 42772
На форуме: 8 месяцев, 4 дня
Карма:




интересно выскочит в студию опять кто нибудь со словами "ЭтоНифабрика"?..
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Аццкая хрень
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5475
Пользователь №: 32538
На форуме: 4 года, 6 месяцев, 9 дней
Карма: 49




docentovich
ЭтоНифабрика


--------------------
Правда тоже ложь, но с иным углом.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
docentovich  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 32
Пользователь №: 42772
На форуме: 8 месяцев, 4 дня
Карма:




документальное подтверждение в студию=)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Аццкая хрень
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5475
Пользователь №: 32538
На форуме: 4 года, 6 месяцев, 9 дней
Карма: 49




docentovich
я просто сбалаболил biggrin.gif


--------------------
Правда тоже ложь, но с иным углом.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 4 дня
Карма: 104




Цитата (docentovich @ 10.06.2016 - 19:22)
документальное подтверждение в студию=)

Не! Ну это конечно же фабрика, только она фабрицирует вообще что захочешь...
Имело бы смысл хотябы на наличие интерфейса проверять...
Типа :

if (in_array($interfaceName, class_implements($className)) {
//create new instance
}


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
docentovich  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 32
Пользователь №: 42772
На форуме: 8 месяцев, 4 дня
Карма:




согласен. это кстати еще и ответ на вопрос из соседней ветки "зачем нужны классы"
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
docentovich  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 32
Пользователь №: 42772
На форуме: 8 месяцев, 4 дня
Карма:




Цитата (SlavaFr @ 13.06.2016 - 15:38)
Цитата (docentovich @ 10.06.2016 - 19:22)
документальное подтверждение в студию=)

Не! Ну это конечно же фабрика, только она фабрицирует вообще что захочешь...
Имело бы смысл хотябы на наличие интерфейса проверять...
Типа :

if (in_array($interfaceName, class_implements($className)) {
//create new instance
}


есть еще такой вариант (но ваш мне нравиться больше):


class ValidatorsFactory{

public static function factory($name){

$name = "Validator".$name;

if(!class_exists($name)) return null;

return new $name;
}
}




и классы

class ValidatorZero{}


class ValidatorElse{}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 2 [3]  Ответ в темуСоздание новой темыСоздание опроса