За последние 24 часа нас посетили 20443 программиста и 1092 робота. Сейчас ищут 828 программистов ...

form validation [готовое решение, принимаются замечания]

Тема в разделе "Решения, алгоритмы", создана пользователем Koc, 15 фев 2009.

  1. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    kostyl
    Лишний кусок кода, прослойка, которая будет сильно мешать. Помните - я на highload работаю, у меня вообще щас:
    [sql]SELECT fields, usr_id FROM enteties[/sql]
    и потом
    PHP:
    1. <?php
    2. $profiles->preFetch($user_ids);
    3. foreach ($user_ids as &$v) {
    4.     // Сдесь соединяем данные и делаем прочие обработки
    5. }
    6.  
    Оптимизация под MySQL NDB Cluster и key-value хранилища - API $profiles скрывает как именно и где хранятся данные по юзерам. Так что ActiveRecord и всякие ORM сразу лесом с ихними валидаторами.

    Mr.M.I.T.
    Потому что придётся писать их кучу - комменты для фоток, комменты для событий, комменты для блогов, комменты для видео, ...., комменты для N-ой хрени. Хотя комменты конечно можно сделать более-менее универсальные, но есть куча других смешанных вещей, разбиение которых в угоду правильной модели городит ООП"шность и скажется на производительности и потреблении памяти сильно.

    А вообще мысль такая, что к примеру есть те же комменты - в разных модулях это разные имена полей как минимум - уже нужно это как-то синхронизировать. К тому же как тогда делать комменты? В виде хелпера или модуля, который просто используем в нужном нам месте через $comments = Core::getInstance('comments') ? Опять же куча писанины.

    Хотите поразмять мозг над чем-то реальным? Можем организоватся, дам более подробную инфу, подумаете что можно сделать :) А мы с 440Hz берёмся сделать имплементацию в рабочем порядке (ибо в любом случае улучшать надо будет)
     
  2. kostyl

    kostyl Guest

    А можешь просто дать, без "можем огранизоваться" ибо времени на организоваться может не быть :)
     
  3. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    вот я сейчас как раз делаю модуль комментов. Надеюсь, что он будет универсален.

    Пока что это комменты для отелей (турсайт). Особенность комментов в этом проекте: то, что они должны сохранять дату отдыха+возможность загрузить фотки+оценить по нескольким параметрам отель. С этим я планирую српавиться при помощи event'ов. Ну посмотрим.

    Просто те же самые комменты нужно будет присоеденить и к магазину и к новостям и к студпроекту.
     
  4. kostyl

    kostyl Guest

    я делаю микро ORM или ActiveRecord или типа того, а потом наследую от них любой объект который можно сохранить в базу. Если что то надо крутое, то перезагружаю методы. Например если сохранять пользователя после регистрации то у него метод __set перегружается из за непрямого пароля в виде где то таком:
    PHP:
    1.  
    2. <?php
    3. public function __set($Property, $Value)
    4. {
    5.   if ($Property == 'Password') {
    6.     paren::__set($Property, sha1($Value));
    7.   }
    8.   esle {
    9.     parent::__set($Property, $Value);
    10.   }
    11. }
    Тоже самое и с картинкой, перезагружается метод Save() ибо надо ее сохранить из временной директории закачки в нужную
    PHP:
    1.  
    2. <?php
    3. public function Save($FileVar)
    4. {
    5.   if(!$this->Id) {
    6.     //Операции с файлом
    7.    //return false; если ничего не получилось
    8.   }
    9.   else {
    10.     return parent::Save();
    11.   }
    12. }
    Так что плодить объекты не так трудно, да и реализация предка не сильно большая, оперирует только преобразованиями полей и работой с БД...
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Например?
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Psih
    что имеешь: модуль с событиями в котором для каждого идут СВОИ комменты, со СВИМИ проверками и фильтрацией, требуешь хайлоад кода
    что хочешь: один раз настроить проверку для всех комментов в событиях
    что в итоге: т.к. хочется тебе универсализации, да ещё и хайлоад, то насколько мне видится одно с другим не совместимо. в хайлоаде каждый участок кода важен и хорошо прорабатывается, чего с универсализацией никак добиться нельзя.
    вывод: делать проверки каждый раз

    что бы я делал: соб-но ты уже об этом написал, я оформил бы комментарии ввиде модулей, думаю некоторые бы использовал в нескольких местах. проблем со связкой думаю быть не должно? =)
     
  7. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Mr.M.I.T.
    Есть золотая середина между универсализацией и хайлоад-фанатизмом. Посмотрите на Yii - фреймворк, а шустрый мама не горюй.
     
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    [vs]
    Немного позже отпишусь. Щас я хочу одного - спать. Бессонная ночь по востановлению сервера.
     
  9. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    идея подели данных мне не нравится
     
  10. kostyl

    kostyl Guest

    Psih
    честно говоря не сильно понял твое мнение о валидации совмещенное с кластером...
     
  11. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Psih
    а как если не секрет ты экранируешь данные уже внутри логики домена, а не при выводе?
     
  12. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Костян
    ЭКранирование - при выводе конечно. При вводе - strip_tags + trim, исключая к примеру поле с паролем :)

    kostyl
    Ну к примеру строить валидацию на основе ORM типа Doctrine под хайлоадом не очень умный ход, т.к. большие накладные расходы. Я валидацию делаю простыми проверками каждого поля руками, использую статический класс по возможности. Всё это дело запихиваю в блок try - catch и плююсь исключениями.
     
  13. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Меня интересует как идет жизненный цилк: момент извлечения данных - декодирование - "отдача" свойства объектом????
     
  14. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Костян
    Всё просто - в объекте массив, ключи которого являются именами данных.

    Т.е. is_set('var') это return array_key_exists($this->data['var'];
     
  15. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Psih
    тоесть декодиноварие между return и return array_key_exists($this->data['var'];?
     
  16. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Какое такое декодирование?....
     
  17. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО