ФорумПрограммированиеПыхнуть хотите?Готовые решения → Мои наработки

Мои наработки

  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 3 октября 2009 г. 10:57, спустя 46 секунд

    Сейчас пишу что-то вроде ядра, хочу услышать отзывы (адекватные), прекрипил только папку core, знающие поймут как оно работает (а других нет на пыхе)

    Вот принцип работы экшенов :
    - Роутер парсит URL вида http://site.ru/action/event/param1/ и разделяет его на части, в переменной Router::$Action лежит сам экшен, в переменной Router::$Event лежит эвент, а в массиве Router::$Params лежат остальные значения полученные из url

    - Системой проверяется , есть ли нужный экшен , если нет , то загружается экшен "ошибка"

    - При загрузке экшена подгружается класс экшена, создаётся экземпляр класса, запускается функция $classname->_load(); , запускается нужный эвент (определённый метод класса)

    - В саммом классе есть что-то примерно такое :
    <?
    class ActionName extends Action {
       
       function _load () {
           
           $this->SetDefaultEvent('main');
           $this->AddEvent('top', 'top');
           $this->AddEventPreg('[0-9]', 'full');
           
       }

       function main() {
           echo 'Главная';
       }

       function full() {
           echo 'Полная новость';
       }

       function top() {
           echo 'Топ новостей';
       }

    }


    Action::SetDefaultEvent('main'); мы установили дефолтный эвент(метод в классе) который запустится если значение Router::$Event будет пусто, или нужный метод будет не найден

    Action::AddEvent('top', 'top'); мы установили , что когда Router::$Event будет = 'top', зупустится метод top

    Action::AddEventPreg('[0-9]', 'full'); мы установили, что когда значение эвента будет соответствовать регулярному выражению, запустится метод full





    1. core.rar (59)
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 10:51, спустя 23 часа 54 минуты 9 секунд

    1) помоему так смешивать динамические и статические вызовы нехорошо. у тебя создается ОБЪЕКТ типа ActionName, но ты инициируешь его свойства обращаясь к методам родительского КЛАССА. почему не так:

    function _load () {

    $this->SetDefaultEvent('main');
    $this->AddEvent('top', 'top');
    $this->AddEventPreg('[0-9]', 'full');

    }

    ???
    2) зачем после тебе делать инициализацию в два этапа: сначала создавать объект, потом вызывать _load ? нельзя это совместить в конструкторе?
    ιιlllιlllι унц-унц
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 3 октября 2009 г. 10:56, спустя 5 минут 5 секунд

    artoodetoo, переделал 1
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 10:59, спустя 2 минуты 54 секунды

    artoodetoo, правильно что 2. ибо иногда надо бывает в конструкторе провести дополнительные действия, либо потом поменять логику немного и сначала будет создаваться конструктор, а потом уже через 40-50 строчек вызываться его методы … и вот в ЭТОМ случае придется дохуя переписать))

    другое дело, что подобную инициализацию я бы сделал еще более упрощенно,

    $this->AddEvent('top', 'top');

    ==
    class event ext..
    {
    public $events = array("top","top");

    function
    function
    function
    }

    это первое, второе, я бы сделал

    event call на уровне мегик функции __call которая бы вызывалась при отсутствии эвента и писала мол "да не учто? нет такого евента иди нахуй"

    третье, я бы евенты вообще убрал отсюда :)

    ибо эвенты бывают достаточно громоздкими и когда один класс имеет под 10-20 эвентов у нас получается исходник на 5-15 страниц что я считаю говнокодом.

    чмоки всех :)
    Сапожник без сапог
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 3 октября 2009 г. 11:04, спустя 5 минут 1 секунду

    phpdude, Можно и так как ты, при отсутствии можно сделать ошибку, щас дефолтный просто, а на 15-20 не надо, можно просто выносить в отдельный класс и ложить в libs
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 11:06, спустя 2 минуты 21 секунду


    phpdude, Можно и так как ты, при отсутствии можно сделать ошибку, щас дефолтный просто, а на 15-20 не надо, можно просто выносить в отдельный класс и ложить в libs
    а можно просто не использовать классы :)

    вот нахуй чтобы сделать запрос к бд и приаттачить результат к шаблонизатору хп должен отпарсить + создать дерево зависимых классов? :) ну и создать объект и вызвать его методы? в чем плюс от этого?
    Спустя 35 сек.
    переубеди меня что классы - АХУЕННО ПОЛЕЗНО для вывода страниц и обработки действий польователя. В ЧЕМ ПЛЮС ОТ НИХ В ДАННОЙ СИТУАЦИИ?
    Сапожник без сапог
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 3 октября 2009 г. 11:08, спустя 2 минуты 3 секунды

    phpdude, потому что так как у меня с эвентами, очень удобно, вот например тебе надо сделать пару страниц, что будеш юзать, свитч ? Эт говно будет
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 11:08, спустя 12 секунд

    дуд, а как ты считаешь правильно разделять "контроллеры" — простыми инклудами без классов?

    вобще этот роутинг мне чертовски напоминает Yii. очень нехуё*ый фреймоврк. а за хорошее полагается плюсик. плучай :)
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 11:13, спустя 4 минуты 55 секунд

    artoodetoo, Troy, стандартный роутинг, без обид.

    я за инклюд эвента.

    например есть папка

    /core/modules/$module/$event.php

    а стандартный будет например index.php

    плюсы:
    - не надо создавать ничего в случае ненайденного евента
    - не надо ничего указывать как default, ибо это index.php
    - не надо писать дополнительные строки чтобы СОЗДАТЬ ЭВЕНТ
    - сразу обращаемся к тому, что нам надо. хотя если это все обернуть в красивое ООП, то этот пункт похую :)
    - небольшой прирост скорости … (нахуй надо? :))
    - не надо меня переубеждать что я неправ
    Сапожник без сапог
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 3 октября 2009 г. 11:23, спустя 9 минут 48 секунд

    Ты прав, но на половину)) Кстати , что с тобой ? Спокойный какой-то ))
    Спустя 37 сек.
    artoodetoo, мне раньше райдер ставил, теперь ты 3 подряд уже ))))))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 12:13, спустя 49 минут 45 секунд

    Troy, ты нравишься кому то одному))
    Сапожник без сапог
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 3 октября 2009 г. 12:24, спустя 10 минут 48 секунд

    phpdude, забанься
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 12:26, спустя 2 минуты 41 секунду


    phpdude, забанься
    второй раз не поверят
    Сапожник без сапог
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 3 октября 2009 г. 13:37, спустя 1 час 10 минут 32 секунды

    Мое мнение по поводу этого ты знаешь ;)
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 октября 2009 г. 13:41, спустя 4 минуты 1 секунду

    phpdude, ты и прав и неправ :) в целом поддерживаю: не надо делать то, чего можно не делать. и похуй на "так принято" или "вот там так сделано и все в восторге" — малоебучий фактор. делай как тебе удобно. но отсюда следует что и ты не можешь поучать других. им (сегодня) удобно по-другому.

    Troy, плюсов не жалко. не свои отдаю.
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!