За последние 24 часа нас посетили 53125 программистов и 3116 роботов. Сейчас ищут 1087 программистов ...

Концепции и парадигмы

Тема в разделе "Прочие вопросы по PHP", создана пользователем XCoder, 24 июн 2012.

  1. Pran

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

    С нами с:
    15 янв 2011
    Сообщения:
    39
    Симпатии:
    0
    Да, как только администратор выделит сервер для внешних тестов. Основа развёртывается вручную, ядро пишется в Notepad++. Всё сурово, в лучших кустарных традициях :) Как бы эту поделку преподнести сообществу?

    Пример заготовки под модуль (контейнер логики) блога:

    Код (Text):
    1.  
    2. <?php
    3.  
    4.     // Модуль Blog. Контейнер логики.
    5.     // FrontModule - можно подключить к страницам внешки (доступен в списке выбора)
    6.     //
    7.     class Blog extends FrontModule {
    8.  
    9.         public static function getSummary() {
    10.  
    11.             return array(
    12.  
    13.                 'title' => 'Блог',
    14.                 'icon' => 'news.png'
    15.             );
    16.         }
    17.  
    18.         // «Пути-дорожки» композитора контрольной панели
    19.         // Обрабатывается как /STATIC_BACK_PATH/action-path/with-any-slashes
    20.         // т.е., /admin/action-path/, где 'action-path' - ключи возвращаемого методом массива.
    21.         //
    22.         public static function getBackActions() {
    23.  
    24.             return array(
    25.  
    26.                 'blog' => array(
    27.  
    28.                     'type' => self::AR_ITEM,
    29.                     //'key' => 'Blog editor', # Роль, которой должен обладать пользователь
    30.  
    31.                     'title' => 'Действие из ветки Back',
    32.                     'callback' => 'backSample'
    33.                 )
    34.             );
    35.         }
    36.  
    37.         // «Пути-дорожки» для композитора внешки.
    38.         // Обрабатывается как /DYNAMIC_FRONT_PATH/action-path/with-any-slashes
    39.         //
    40.         public static function getFrontActions() {
    41.  
    42.             return array(
    43.  
    44.                 null => array(
    45.  
    46.                     'type' => self::AR_TEMPLATED, # На выходе задействует шаблонизатор, ожидает массив блоков для заполнения регионов.
    47.  
    48.                     //'type' => self::AR_JSON,    # Преобразует выходной массив в JSON
    49.                     //'type' => self::AR_PLAIN,   # Завершит сценарий по выходу из метода (аналог void, скорее так и назову)
    50.  
    51.                     //'module' => __CLASS__, # В каком модуле-соте запросить callback? По умолчанию - текущий модуль
    52.                     'callback' => 'startup'
    53.                 ),
    54.  
    55.                 'tag' => array(
    56.  
    57.                     'type' => self::AR_TEMPLATED,
    58.  
    59.                     'module' => 'Blog_Tag', # Тело для работы с сущностью тега, хотя можно создать метод и в рассматриваемом модуле.
    60.                     'callback' => 'tag'
    61.                 ),
    62.  
    63.                 'json/tag' => array(
    64.  
    65.                     'type' => self::AR_JSON, # На выходе задействует стандартную функицю json_encode
    66.  
    67.                     'module' => 'Blog_Tag',
    68.                     'callback' => 'getJSON_tag'
    69.                 )
    70.             );
    71.         }
    72.  
    73.         ##
    74.         ## Методы взаимодействия с «пчелой-композитором» Front (внешкой)
    75.         ##
    76.  
    77.         public function startup() {
    78.  
    79.             //
    80.             // TODO: Place the Blog startup page logic here...
    81.             //
    82.  
    83.             return array(
    84.  
    85.                 'headline' => 'Контент блока уровня M для региона headline',
    86.                 'details' => 'Контент блока уровня M для региона details'
    87.             );
    88.         }
    89.  
    90.         ##
    91.         ## Методы взаимодействия с «пчелой-композитором» Back (контрольной панелью)
    92.         ##
    93.  
    94.         public function backSample() {
    95.  
    96.             return array(
    97.  
    98.                 'content' => 'Зона вывода одна, а слева панелька меню'
    99.             );
    100.         }
    101.     }
    Копируется в папку modules и сразу становится виден в контрольной панели, доступен для подключения.
     
  2. d1gi

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

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    Pran, а ну примерно ясно :)) в прицнипе ничего интересного по сравнению с симфони2 нету... а вы случано не собираетесь переходить на симфони? ;)
     
  3. Pran

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

    С нами с:
    15 янв 2011
    Сообщения:
    39
    Симпатии:
    0
    Нужно составить примерное представление с основ, как там чего делается - возможно, заменю движок на что-то более прогрессивное. Хотя интереснее взять лучшее от разных систем и собрать в одну.

    Сколько времени в Симфонии затрачивается на формирование одной страницы, наполненной только текстовыми блоками? С подключенной «нодой-блованкой» без логики? Что делать, если нужно получить от некоторого пути ответ в формате JSON? Насколько принципы кустарного движка похожи на принципы Симфонии? Где они перекликаются, а где разнятся?

    Среднее время обработки запроса без ускорителя wincache и без ресурсоёмких бизнес-операций в моём случае 0.012-0.017 сек, изменение памяти на момент отдачи в браузер (PHP 5.3) - 444.27 Кбайт.

    Если я правильно понял, к регионам на странице Симфонии можно подключить разные модули? В моём случае модуль может использовать любой регион, затирая то, что могло быть помещено в него ранее.
     
  4. d1gi

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

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    про симфони лучше читать документацию буквально с самого начала ;))

    по "скорости" симфони обычно будет проигрывать якобы аналогам, не потому что сф2 такой тупой и монстроузный, а потому что то что ставится ему в просивовес это несерьёзные и ограниченные поделки, в которых могут разобраться несколько человек на планете ;)) такой поделкой можно считать и мою бывшую цмс-ку, демо которой можно посмотреть на http://digi.tw1.ru/ , но сейчас я переделываю двиг на симфони, по скорости он теперь стал "медлеенее" ;)) но эта замедлительность в выполнении с лихвой перекрывается гибкостью и надежностью разработки, а также потенциалом платформы.

    например на данный момент показатели главной страницы вот такие:
    Execution time: 20 ms. Memory usage 3.51 MB (3.79 peak).
    DB query count: 18 (summary execution time: 4 ms, 21.95 %).

    это крутится на виртуальной машине virtualbox, вот пхпинфо с неё http://smart-core.org/phpinfo_gentoo_x64.html
    на хостовой машине win7 64bit и проц i5.

    в прицнипе с такими показателями можно смело браться за создание хайлоада :) т.к. многие вещи можно скешировать на самых разных уровнях.


    еще добавлю, что 32-х битная система http://smart-core.org/phpinfo_gentoo_x32.html работает медленее на томже хостовом копмпе:
    Execution time: 23 ms. Memory usage 1.94 MB (2.14 peak).
    DB query count: 18 (summary execution time: 6 ms, 24.06 %).
     
  5. d1gi

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

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    ну что, товарищи? :) с летних отпусков начинаем выходить? ;) какие мысли по дальнейшему развитию темы? ;) а то как-то неоконченность разговора ощущается ;)
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    „Чтобы стоять, надо держаться корней.“

    Хорошо выдумывать свою терминологию и изобретать велосипеды. Это я без издевки, действительно считаю, что изобретать полезно. Но хорошо бы при этом четко знать какие велосипеды уже есть. Удобную концепцию предлагает нам сам протокол HTTP. В центре всего стоит ресурс — веб-страница, изображение, данные в формате JSON, что угодно.

    • Ресурс: URL (Uniform resource locator)
    • Действие с ресурсом: HTTP-метод GET, POST, etc.
    • Представление: HTTP-заголовок Accept
    Популярная сейчас архитектура REST это и есть концептуальный возврат к корням. Переложение техники MVC на веб несколько увело программистов от сути. Когда в обсуждении я вижу термин экшен контроллера, я понимаю, что скорее всего он подразумевает свой отдельный адрес, то есть вместо ресурса (существительного) мы получили действие (глагол).

    На написание этой кучи букв меня подвигла статья Introducing the RMR Web Architecture, в которой автор предлагает свою объектную модель, примиряющую MVC и REST. Кому интересно, я сделал свободный перевод.
     
  7. d1gi

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

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    прочитал перевод, ничего нового не увидел, Symfony2 и есть НЕ mvc фреймворк, это request-response фреймворк.
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    HTTP существует с 1991 года, очень не новая вещь ))) Можете рассказать что нового Вы обнаружили в Symphony2.
     
  9. d1gi

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

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    c Symphony2 дела не имел, только с Symfony2.
    понятия "новое" оно всегда относительное ;) вы можете рассказать о концепции RMR в сравнении с Symfony2?
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    Ок. Я нашел конкретный пост где Фабьен Потенциер (я правильно произнес?) объясняет является ли Симфони2 MVC фреймворком. капец, он мог бы работать политиком, так гладко ответил "да" и "нет, потому что". Я подозреваю, что Фабьен это бог или хотя бы мессия, за ним идут легионы.

    Симфони2 это набор компонент и главный плюс в том, что они слабо связаны. Про то, насколько они гладко ложатся в архитектуру REST или еще во что, можно будет говорить только на примере готового приложения. Статья про RMR напротив описывает "клей" для построения RESTful приложения и не заморачивается конкретными компонентами.

    Типа того )
     
  11. d1gi

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

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    т.е. RMR пока теория? ;)
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    У автора есть фреймворк и на эту статью ссылаются на stackoverflow — я так на неё набрёл. Не в курсе на скольких разрабов она повлияла.
    Вот на эту тему на форуме пока никто не ссылается, это не повод для комплексов )))
     
  13. d1gi

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

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    ясно, ну да, вот и жду тех 2-х ребят, которых больше всего теории описали в начале темы, вдруг они смогут что-нить показать ;)
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    А что такое RMR?