За последние 24 часа нас посетили 21923 программиста и 989 роботов. Сейчас ищут 674 программиста ...

Покритикуйте реализацию "Model-View-Controller"

Тема в разделе "Решения, алгоритмы", создана пользователем Mr. T, 24 мар 2012.

  1. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Здравствуйте,

    в свободное время написал небольшой велосипед, реализацию парадигму программирования "Model-View-Controller". Это попытка понять последнее на более глубоком уровне, а не просто используя фреймворк из коробки. До этого работал с Yii фреймворком, который порекомендовал один пользователь этого форума. Поэтому идейным вдохновителем был он (фреймворк) и частично самописный фреймворк, который используется на работе.

    В этой теме я ожидаю полезных ответов, исходный код можно найти здесь.

    Благодарю за внимание.
     
  2. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Понравился валидатор, по использованию в feedback - код самого валидатора не изучал.
    Непонятно, кому actionIndex() в PageController.php возвращает объект, и почему при этом actionView ничего не возвращает.
    Непонятно, зачем в View::render передавать передавать аргументы для шаблона. Я вообще не перевариваю такой логики, render - это "аминь", ну если там можно передать аргумент кешировать или нет - еще куда ни шло, но не переменные же шаблона.
    Код (Text):
    1. $view = new View();
    2. $view->assignArray($params);
    3. $view->render();
    - труЪ. Это бы не было недостатком, если бы был другой способ передачи переменных в шаблон, пусть простейшим $view->name = 'Vasya'.
    Сессии. Такое ощущение, что вы просто не осилили session_save_handler. Нет никаких причин отказываться от работы с сессиями посредством массива $_SESSION, в пользу ОО, которое к тому же портит структуру этого массива. Это бы тоже не было недостатком, если бы сессии из фреймворка вообще не трогали этот массив.
    На полные слова Controller в именах файлов явно не Yii вдохновил.
     
  3. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    [vs], спасибо за ответ. Валидатор еще не готов до конца, думаю, смотрел реализацию в ZF, понравилось, думаю, сделать примерно также, применить шаблон проектирования Factory Method, как вариант, еще точно не решил. Также хочу добавить метод, который будет генерировать код для jQuery плагина jQuery Validation, чтобы обеспечить клиентскую валидацию основываясь на правилах описанных в модели.

    Что касается действия indexAction в контрлллере PageController (именование не из Yii, это правда, не помню почему так сделал :)), то действительно, возвращаеть объект не обязательно, где-то видел такое, сейчас не вспомню где.

    По поводу метода render() не понял немного, в метод передается имя представления.

    Класс для работы с сессий и БД - прототипы, буду доработывать. По классу для работы с сессий есть такой момент, у меня на работе было нужно реализовать хранение сессий в Memcache, при этом так образом, чтобы если используются разные домены (может быть несколько сервисов), то последние должны иметь доступ к сессии друг друга...
     
  4. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Я про $params здесь
    Код (PHP):
    1.     public function render($viewName, array $params = array())
    2.     {
    3.         $viewFile = $this->_viewPath . DIRECTORY_SEPARATOR . strtolower($viewName) . '.php';
    4.         if (!file_exists($viewFile)) {
    5.             return new ErrorHandler(404, 'View ' . $viewName . ' not found.');
    6.         }
    7.         extract($params); 
    обычно аналог этого $params наполняется до вызова render(), в котором происходит exctract.
    set_session_save_handler() как раз и нужна для того, чтобы передать управление хранением сессий пользовательским функциям, сохраняя доступ к ней через $_SESSION.
     
  5. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Посмотрел YF, сделано так же, в ZF через метод assign и магический метод __set. Как на меня, то в первом случае удобно, что после вызова метода render не нужно чистить за собой, также не возникает баяна на много строк из методов assign. Для меня не критично, нравится как сделано в YF и в ZF.

    Я был не прав, когда согласился, что именование файлов контроллеров в YF не такое, он такое :) За сессии спасибо за наводу, обязательно рассмотрю :)