Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП идеологический момент 
:(
    Опции темы
Muchenik
Дата 23.10.2009, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 27.10.2005

Репутация: нет
Всего: 5



Доброго времени суток. Возник небольшой спор по поводу мелочного момента при реализации модели.
Прошу высказать мнение с аргументацией по этому поводу.
Ситуация следующая, есть модель (Model), в которой реализованы методы валидации и добавление данных.
Есть две спорных реализации, типа
Вариант 1:
Код

class Model {
    private $_data = array();
    public function add($data)
    {
        $this->_data = $data;
        $this->_validateStep1();
        $this->_validateStep2();
        
        $this->_saveRecord(); /* private ф-ия, сохраняет данные $this->_data*/
    }
    
    protected function _validateStep1()
    {
        /*
        тут валидация и обработка $this->_data типа htmlspecialchars и тд.
        */
    }
}


Вариант 2:
Код

class Model {
    public function add($data)
    {
        $data = $this->_validateStep1($data);
        $data = $this->_validateStep2($data);
        
        $this->_saveRecord($data);
    }
    protected function _validateStep1($data)
    {
        /*
        тут валидация и обработка $data типа htmlspecialchars и тд.
        */
        return $data;
    }
}

Всем заренее спасибо.



Это сообщение отредактировал(а) Muchenik - 23.10.2009, 20:34
PM MAIL ICQ   Вверх
solenko
Дата 23.10.2009, 22:56 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 2
Всего: 67



Какое имеет отношение htmlspecialchars к валидации?
Зачем вообще htmlspecialchars на сохранении?
Зачем несколько шагов валидации?
Валидация -- процесс, которй ни коим образом не изменяет данные. Результат валидации -- булево значение либо exception в зависимости от религии.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Muchenik
Дата 24.10.2009, 00:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 27.10.2005

Репутация: нет
Всего: 5



Меня более интересует вопрос, как правильнее, хранить информацию в свойстве и обрабатывать ёё по ходу или передавать аргументом в методе, как показано на примере, после чего возвращать результат.

Сорри, наверно я не четко сформулировал вопрос.

Поэтому
Какое имеет отношение htmlspecialchars к валидации? - никакого, класс - это набросок для примера.
Зачем вообще htmlspecialchars на сохранении? - предпочитаю обрабатывать до сохранения. Не согласны?
Зачем несколько шагов валидации? - тут имел ввиду обработка данных в несколько шагов а не валидация.
Валидация -- процесс, которй ни коим образом не изменяет данные. Результат валидации -- булево значение либо exception в зависимости от религии. - спасибо знаю.



Это сообщение отредактировал(а) Muchenik - 24.10.2009, 00:35
PM MAIL ICQ   Вверх
solenko
Дата 24.10.2009, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 2
Всего: 67



Цитата(Muchenik @  23.10.2009,  23:34 Найти цитируемый пост)
Меня более интересует вопрос, как правильнее, хранить информацию в свойстве и обрабатывать ёё по ходу или передавать аргументом в методе, как показано на примере, после чего возвращать результат.

Дело в том, что ООП придумали, чтобы программы сталее более логичными. О логичности сферического коня рассуждать трудно. Потому, либо приведите конкретный пример, либо не ждите конкретного ответа.

Цитата(Muchenik @  23.10.2009,  23:34 Найти цитируемый пост)
предпочитаю обрабатывать до сохранения. Не согласны?

Абсолютно не согласен. Данные -- святыня. Их нельзя портить.
Цитата(Muchenik @  23.10.2009,  23:34 Найти цитируемый пост)
тут имел ввиду обработка данных в несколько шагов а не валидация.

тогда почему валидация в примере?

Цитата(Muchenik @  23.10.2009,  23:34 Найти цитируемый пост)
Валидация -- процесс, которй ни коим образом не изменяет данные. Результат валидации -- булево значение либо exception в зависимости от религии. - спасибо знаю.

Тогда откуда такой пример?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
youri
Дата 24.10.2009, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



приведи кокретный пример шагов
PM   Вверх
MyDarkSide
Дата 9.11.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: -1
Всего: -1



С точки зрения православного ООП, должен быть сделан отдельный класс напр. Validator 
который должен содержать набор методов для проверки данных, и которые будут возвращать булево значение,
типа:
Код

Class Validator {
  static function is_phone();
  static function is_email();
  static function is_url();
}

 вызывать в моделе вот так: Validator::is_phone($data['phone']) 

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

protected $validate = array('phone' => 'is_phone' , 'web_site' => 'is_url'  ) ;  

а в базовый для всех моделей класс вынести метод, который будет вызывать соответствующую проверку, типа:
Код

Class Base_Model {
   function validate() {
       foreach($this->data as $k => $v) {
         $valid_method = $this->validate[$k]; // сильно упрощенный код просто для понятия логики
         if( ! Validator::$valid_method ($v) ) return false;
       
      }
      return true;
   }
}
 
PM ICQ   Вверх
Kevin
Дата 11.11.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.11.2005

Репутация: нет
Всего: 2



Strategy Pattern в поставленную задачу хорошо вписывается.

Это сообщение отредактировал(а) Kevin - 11.11.2009, 16:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0759 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.