Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Идея: низкоуровневый framework на основе Конструктора (Путник)
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Oct 29, 2006 6:34 pm ()
   Post subject:
Reply with quote


М

Выделено из темы «43_HTML_FormPersister: новый взгляд на построение форм»,
расположенной в форуме Конструктор (16 Декабря 2006, 15:21).
Back to top
View user's profile Send private message Send e-mail
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sun Oct 29, 2006 6:34 pm (спустя 1 секунду; написано за 4 минуты 23 секунды)
   Post subject:
Reply with quote

Спасибо, Дмитрий. Я пробовал, и с html_options все работает, просто надоело по сто раз вызывать $smarty->assign, да и html_options выдает избыточный на мой взгляд код.

Оффтопик: было бы здорово, если бы вы объединили все ваши разработки в единый framework, ведь почти все необходимое уже имеется :-). Думаю, он составил бы достойную конкуренцию существующим в настоящее время решениям и размером, и удобством использования.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Oct 30, 2006 12:21 am (спустя 5 часов 46 минут; написано за 35 секунд)
   Post subject:
Reply with quote

Но ведь библиотеки практически полностью независимы друг от друга. К тому же они работаю на концептуально более низком уровне, чем framework.
Back to top
View user's profile Send private message Send e-mail
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Mon Oct 30, 2006 8:29 am (спустя 8 часов 7 минут; написано за 6 секунд)
   Post subject:
Reply with quote

Конечно, библиотеки независимы друг от друга. Но ведь в состав framework и входят библиотеки, которые выполняют разные функции. Одни работают с базой данных, другие отвечают за отображение информации, третьи делают еще что-нибудь, но подчиняются одной цели - облегчить труд разработчика web-приложений, избавить его от рутины, повысить скорость разработки etc. Основа уже есть - работа с базами данных, построение, валидация форм, поддержка Ajax, отладка скриптов. Добавить еще функции работы с изображениями, файлами, электронной почтой и еще чего-нибудь, и будет настоящий framework :-).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Oct 30, 2006 9:48 am (спустя 1 час 19 минут; написано за 1 минуту 4 секунды)
   Post subject:
Reply with quote

Что ж, возможно, Вы правы. Но только это будет очень странный framework: очень низвоуровневый, в смысле. Я, честно говоря, не представляю пока, чем он будет отличаться от набора файлов библиотек + файла framework.php, в котором все эти библиотеки будут по одной подключаться.
Back to top
View user's profile Send private message Send e-mail
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Mon Oct 30, 2006 10:00 am (спустя 12 минут; написано за 1 минуту 24 секунды)
   Post subject:
Reply with quote

Тут надо хорошо подумать, чего-бы такого засунуть в framework.php, чтобы не просто подключать библиотеки ;-).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Nov 08, 2006 1:28 am (спустя 8 дней 15 часов 27 минут; написано за 2 минуты 56 секунд)
   Post subject:
Reply with quote

Да, пожалуй что определенно правы! Кое-что удается сконструировать, и польза от framework-а становится ощутима. Получается именно низкоуровневый framework - ниже, чем любой шаблонизатор. И это хорошо. Операции: считывание конфиг-файлов (в очень простом, но универсальном формате), инициализация парсеров форм, консоль с открытием по паролю, подключение к DbSimple, логирование запросов и инструменты для работы с низкоуровневыми фатальными ошибками.
Back to top
View user's profile Send private message Send e-mail
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sat Dec 16, 2006 10:17 am (спустя 1 месяц 8 дней 8 часов 49 минут; написано за 7 минут 38 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Да, пожалуй что определенно правы! Кое-что удается сконструировать, и польза от framework-а становится ощутима. Получается именно низкоуровневый framework - ниже, чем любой шаблонизатор...
А нужен ли вообще шаблонизатор? Чтобы не скатываться в идеологические войны, можно дать возможность использовать то, что больше всего нравится использовать конкретному разработчику - Smarty, FastTemplate, TinyButStrong, PHP + HTML etc... А вот единый механизм валидации форм с выводом сообщений об ошибках был бы совсем не лишним.

Как вы считаете, оправдана ли MCV модель при создании framework? Пытался разобраться с CakePHP, сложилось ощущение, что в реализации Model они слегка перегнули палку. Особенно это касается случаев, когда нужно осуществить выборку из нескольких таблиц.

Дмитрий, может быть стоит выделить эту тему в отдельную ветку?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat Dec 16, 2006 3:23 pm (спустя 5 часов 6 минут; написано за 14 секунд)
   Post subject:
Reply with quote

Штука в том, что на практике под тремя буквами MVC каждый понимает что-то свое.
Back to top
View user's profile Send private message Send e-mail
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sat Dec 16, 2006 7:22 pm (спустя 3 часа 59 минут; написано за 7 минут 46 секунд)
   Post subject:
Reply with quote

Может быть эта ветка форума и позволит найти общий знаменатель. В принципе, отделение "логики" от "низкоуровневых функций" - вещь вовсе не плохая, и значителько облегчает как проектирование и разработку своих, так и понимание чужих программ.
Back to top
View user's profile Send private message Send e-mail
Тёмыч
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sat Dec 16, 2006 7:56 pm (спустя 33 минуты; написано за 7 минут 11 секунд)
   Post subject:
Reply with quote

Я уже довольно давно использую конструктор именно в качестве веб-фреймворка и могу отметить, что в сравнении с существующими он выигрывает по многим пунктам: полная прозрачность работы, копонентный подход (если часть не нравится, то легко её заменить на что-то другое), скорость (по скорости работы на уровне CodeIgniter, что гораздо быстрее Symphony и пр. (правда стоит отметить, что у Симфонии и уровень абстракции выше на порядок)).
Мне кажется, что для полноценного фреймворка не хватает некоторых необходимых частей:
1. Работа с БД на уровне абстракции выше, чем DbSimple. Пускай библиотека использует в своей основе DbSimple, но позволяет забыть о конкретных СУБД.
2. Механизм организации и управления ЧПУ. Общий, чтобы небыло разнобоя.
3. Общий механизм работы с ошибками (любыми). Как было сказано выше пользователем Путник.

Для начала пожалуй хватит, остальное в виде расширений можно сделать: управление доступом, Model, Controller и пр.
Back to top
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sat Dec 16, 2006 8:38 pm (спустя 42 минуты; написано за 5 минут 21 секунду)
   Post subject:
Reply with quote

Тёмыч wrote:
Работа с БД на уровне абстракции выше, чем DbSimple.
А нужно ли это? Чем лучше и понятнее выглядит конструкция:
Code (any language): скопировать код в буфер обмена
$this->db->select('param_value');
$this->db->where('param_name', $param_name);
$this->db->orderby('param_name', 'asc');
$query = $this->db->get('params');
чем:
Code (any language): скопировать код в буфер обмена
$query  = 'SELECT param_value FROM params WHERE param_name = ? ORDER BY param_name ASC';
$result = $db->select($query, $param_name);
Ведь DbSimle и так позволяет "забыть" о конкретных СУБД. Но ничто не мешает написать класс-надстройку над DbSimple, вроде ActiveRecords из CodeIgniter.
Тёмыч wrote:
Механизм организации и управления ЧПУ. Общий, чтобы небыло разнобоя
Вещь абсолютно необходимая.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Sat Dec 16, 2006 10:19 pm (спустя 1 час 41 минуту; написано за 5 минут 30 секунд)
   Post subject:
Reply with quote

Путник wrote:
$this->db->select('param_value');
$this->db->where('param_name', $param_name);
$this->db->orderby('param_name', 'asc');
$query = $this->db->get('params');
Такая конструкция вообще ужасно выглядит, ИМХО.

1. Увеличавется код
2. Портятся запросы
3. Выглядит нелепо
Путник wrote:
Ведь DbSimle и так позволяет "забыть" о конкретных СУБД.
Отнюдь - у каждой СУБД свой синтаксис (особенно заметно на выборке с ограничением: LIMIT n,m; FIRST m SKIP n; LIMIT m OFFSET n). ИМХО, не имеет смысла разрабатывать проект, работающий со многими СУБД. Каждый проект разрабатывается под конкретную СУБД и точка. Если потребности проекта выросли со временем - все равно придется его переписывать, поскольку невозможно все заранее предусмотреть.
Тёмыч wrote:
Механизм организации и управления ЧПУ. Общий, чтобы небыло разнобоя.
Есть конкретные предложения? (-;
Back to top
View user's profile Send private message
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sat Dec 16, 2006 10:33 pm (спустя 14 минут; написано за 6 минут 34 секунды)
   Post subject:
Reply with quote

Тёмыч wrote:
Механизм организации и управления ЧПУ. Общий, чтобы небыло разнобоя.
Мне чаще всего приходилось сталкиваться с вариантом:
Code (any language): скопировать код в буфер обмена
Тут тоже могут быть неудобства, но этот вариант хоть как-то систематизирован. Неплохо было бы добавить опциональный префикс (ru, en, de, etc.) для мультиязычных приложений.
Code (any language): скопировать код в буфер обмена
Константин Жинько [tIT] wrote:
ИМХО, не имеет смысла разрабатывать проект, работающий со многими СУБД.
Да уж, универсальных решений не бывает. Большинство современных framework'ов занимают не меньше 2 мегабайт в архиве. Zend - так вообще больше 10! Куда это годится?! Я за компактность.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Sat Dec 16, 2006 11:27 pm (спустя 53 минуты; написано за 3 минуты 18 секунд)
   Post subject:
Reply with quote

Путник wrote:
Я за компактность.
Поддерживаю!
Путник wrote:
Механизм организации и управления ЧПУ. Общий, чтобы небыло разнобоя.
У меня другое решение:

имя_узла_1/имя_узла_2/имя_узла_3/имя_узла_4/.../имя_узла_N
где имя_узла либо ID реального объекта в БД, либо символьный алиас идентификатора (уникальный для узлов с одним предком)... Здесь универсального решения не существует. ИМХО.
Back to top
View user's profile Send private message
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sun Dec 17, 2006 2:11 pm (спустя 14 часов 43 минуты; написано за 2 минуты 46 секунд)
   Post subject:
Reply with quote

Константин, предлагаемый вами вариант был бы наиболее удобен для реализации CMS, где существует множество разделов и подразделов. Во многих других случаях (поиск, постраничный вывод, административный интерфейс и т.п.) такой способ построения URL будет очень неудобным.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Sun Dec 17, 2006 4:39 pm (спустя 2 часа 28 минут; написано за 6 минут 6 секунд)
   Post subject:
Reply with quote

Путник
Я про то и говорю, что универсального решения здесь нет и эту часть функционала следует возложить собственно на плечи пользователей CMF. ИМХО. Вообще тема ЧПУ уже немало страниц в этом форуме занимает - думаю, не стоит здесь ее обсуждать (-;

Кстати, мой вариант вообще не для CMS не используется - управление контентом обеспечивает win32-приложение.
Back to top
View user's profile Send private message
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sun Dec 17, 2006 4:54 pm (спустя 15 минут; написано за 1 минуту 57 секунд)
   Post subject:
Reply with quote

В любом случае, ЧПУ нужен. Можно оставить и ваш вариант, только обозвав имя_узла сегментом:

сегмент_1/сегмент_2/.../сегмент_N

и дать возможность определять, что собственно каждый сегмент значит.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun Dec 17, 2006 10:08 pm (спустя 5 часов 13 минут; написано за 10 минут 18 секунд)
   Post subject:
Reply with quote

Константин Жинько [tIT] писал:
Quote:
Такая конструкция вообще ужасно выглядит, ИМХО.
Ваша правда. Это не выход.

Насчет ЧПУ: необходимо сначала определить, что собсно мы хотим получить. А хотелось бы механизм сопоставления адреса URL и вызова метода класса с параметрами. Получается, что конструкция вида
Quote:
префикс/имя_класса_или_файла/имя_функции/параметр_1/значение_1/.../параметр_n/значение_n
подходит больше. Правда тут можно сократить:
Quote:
префикс/имя_класса/имя_метода/значение_параметра_1/.../значение_параметра_n
если условиться, что работаем с классами и незачем дублировать имя параметра (порядок же задан).

Кстати тут было бы удобнее применить подход Django вместо жестких рамок. Но гораздо важнее сначала определить в каком виде применять ЧПУ обработку -- через mod_rewrite?

К вопросу о абстракции от СУБД на уровне запросов. Если использовать чистый стандарт SQL'92 (или какой там общепринятый), то насколько мы покроем возможности различных СУБД? Может написать скрипты преобразований запросов под конкретные СУБД, которые парсят и автоматом: проставляют необходимые кавычки где нужно, добавляют AUTO_INCREMENT, где INT PRIMARY KEY и т.п. А того, чего не понимают не трогают. Плюс вставки {* PGSQL! вставлять только для постгреса *}. Или это гиблая идея?
Back to top
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Sun Dec 17, 2006 10:40 pm (спустя 32 минуты; написано за 3 минуты 11 секунд)
   Post subject:
Reply with quote

Да ни одна в мире СУБД не поддерживает SQL'92, равно как и SQL'99, SQL'03! (-;
Не надо автоматически преобразовывать запросы, ибо это никому не нужный труд. Прошу всех участников дискуссии вдуматься в название библиотеки: DbSimple.
Путник wrote:
В любом случае, ЧПУ нужен.
Я и не спорю:
Константин Жинько [tIT] wrote:
эту часть функционала следует возложить собственно на плечи пользователей CMF
Гость wrote:
в каком виде применять ЧПУ обработку -- через mod_rewrite?
По-моему, это лучшее средство.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Dec 18, 2006 11:29 am (спустя 12 часов 48 минут; написано за 4 минуты 19 секунд)
   Post subject:
Reply with quote

По поводу абстрактного слоя работы с БД - вот можно почитать:

wiki.agiledev.ru/doku.php?id=ooad:dp:data_mapper, www.martinfowler.com/eaaCatalog/dataMapper.html
en.wikipedia.org/wiki/Active_record

Например, практика показывает, что если использовать шаблон Data Mapper и позволять делать в нем выборки не только по "родным" колонкам базы, но также и вставлять подзапросы любой сложности в качестве тех или иных свойств бизнес-объекта, то можно на 99% решить все практические задачи (как это ни кажется парадокасльным), и код получается сильно короче. Только в Data Mapper надо добавить еще два метода: получение списка из базы и получение единичного элемента из базы.

Вообще, в PEAR есть реализации данных паттернов, если я не ошибаюсь. DbSimple же - это другой инструмент. Он заточен на выполнение прямых запросов к базе, что во многих приложениях оказывается более оправданным, чем применение различных дополнительных слоев абстракции.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Dec 18, 2006 11:35 am (спустя 6 минут; написано за 1 минуту 33 секунды)
   Post subject:
Reply with quote

Константин Жинько [tIT] wrote:
ИМХО, не имеет смысла разрабатывать проект, работающий со многими СУБД. Каждый проект разрабатывается под конкретную СУБД и точка. Если потребности проекта выросли со временем - все равно придется его переписывать, поскольку невозможно все заранее предусмотреть.
Ну, я бы заменил тут слово "каждый" на "подавляющее большинство", но смысла это почти не меняет. Проекты без привязки к БД сравнительно редки, в основном это какие-нибудь форумы, CMS и т.д., в то время как большинство других проектов ничего не теряют от привязки к базе. Наоборот - выигрывают, т.к. позволяют использовать специфические особенности базы.
Back to top
View user's profile Send private message Send e-mail
Тёмыч
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Dec 18, 2006 2:03 pm (спустя 2 часа 28 минут; написано за 6 минут 18 секунд)
   Post subject:
Reply with quote

По поводу абстрагирования от СУБД: никто и не говорит о DbSimple. Можно реализовать надстройку над DbSimple, которая будет использовать библиотеку для доступа к БД через общий интерфейс, а сама надстройка например реализует ActiveRecord.
Дмитрий Кóтеров:
Quote:
Проекты без привязки к БД сравнительно редки, в основном это какие-нибудь форумы, CMS и т.д., в то время как большинство других проектов ничего не теряют от привязки к базе. Наоборот - выигрывают, т.к. позволяют использовать специфические особенности базы.
У вас никогда не было ситуации, что заказчик меняет СУБД перед сдачей проекта? У меня пару раз было, что разработка велась под PostgreSQL, а сдавать приходилось под Oracle. В обоих случаях заказчик даже не был виноват в этом.
В любом случае мне кажется, что наличие возможности менять СУБД без изменений в запросах -- огромный плюс современному фреймворку.
Константин Жинько [tIT] wrote:
Гость писал(а):
в каком виде применять ЧПУ обработку -- через mod_rewrite?
По-моему, это лучшее средство.
Лучшее по удобству/скорости, но не по совместимости. Хотя, возможно, оно и оптимальное даже с этим минусом. В любом случае, я так понимаю, что вы против включения подобного функционала?
Back to top
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Mon Dec 18, 2006 2:59 pm (спустя 55 минут; написано за 57 секунд)
   Post subject:
Reply with quote

Тёмыч wrote:
В любом случае, я так понимаю, что вы против включения подобного функционала?
Против. Равно как и против асбтрагирования от СУБД - это не забота фрэймворка, а забота программиста.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Dec 18, 2006 4:12 pm (спустя 1 час 13 минут; написано за 3 минуты 49 секунд)
   Post subject:
Reply with quote

Тёмыч wrote:
У вас никогда не было ситуации, что заказчик меняет СУБД перед сдачей проекта? У меня пару раз было, что разработка велась под PostgreSQL, а сдавать приходилось под Oracle. В обоих случаях заказчик даже не был виноват в этом.
Интересно, а кто же тогда был виноват...
Нет, у меня такого не было. К счастью, есть 2 отличные базы:
- MySQL - если важна скорость, экстремальная масштабируемость с репликацией, совместимость с львиной долей хостингов
- PostgreSQL - если важно выжать из SQL самый максимум возможностей, хранимки, триггеры и т.д.
Обе они бесплатные и достаточно распространенные. Зачем может понадобиться сменить базу (тем более - на Oracle, с переписыванием всех хранимок и т.д.), я решительно не понимаю.

Есть еще
- FireBird - если нужна элегантная поддержка SQL'92 и устраивает глючность, падучесть и тормоза этой базы, а также то, что на хостингах ее очень редко ставят. :-)
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Mon Dec 18, 2006 6:48 pm (спустя 2 часа 36 минут; написано за 29 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
устраивает глючность, падучесть и тормоза этой базы
Второй между прочим уже с месяц как вышел, если не больше. Много ошибок исправлено.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Dec 18, 2006 6:50 pm (спустя 1 минуту 55 секунд)
   Post subject:
Reply with quote

Итого, выходит, что фреймворк у нас должен получиться из того, что есть? Боюсь что это уж слишком "низкоуровневый" фреймворк, если не сказать набор библиотек =).
Константин Жинько [tIT] wrote:
Тёмыч писал(а):
В любом случае, я так понимаю, что вы против включения подобного функционала?
Против. Равно как и против асбтрагирования от СУБД - это не забота фрэймворка, а забота программиста.
Если это МОЖЕТ делать фреймворк, зачем об этом ДУМАТЬ программисту?
Back to top
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Sat Jan 13, 2007 10:21 pm (спустя 26 дней 3 часа 30 минут; написано за 8 минут 23 секунды)
   Post subject:
Reply with quote

А чем плох "набор библиотек"? Есть язык программирования PHP, зачем еще пытаться разобраться в мудреных конструкциях, предлагаемых многими из существующих фреймворков? А из размеры? А функции, которые нужны в одном случаи из 10000?

Если обобщить функции, выполняемые любым web-приложением, то больше трех на ум не приходит:
1. Получить запрос от пользователя
2. Обработать запрос
3. Выдать результат

Соответственно, фреймворк должен делать эти три вещи плюс максимально избавить разработчика от рутины и возможных ошибок с ней связанных, да функцию отладки. Поправьте меня, если я заблуждаюсь.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Sun Jan 14, 2007 12:39 am (спустя 2 часа 18 минут; написано за 41 секунду)
   Post subject:
Reply with quote

Пункт 2 все же само приложение должно делать, а не framework. Иначе зачем тогда приложение? (-;
Back to top
View user's profile Send private message
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Sun Feb 04, 2007 4:40 am (спустя 21 день 4 часа 1 минуту)
   Post subject:
Reply with quote

Quote:
Нет, у меня такого не было. К счастью, есть 2 отличные базы:
- MySQL - если важна скорость, экстремальная масштабируемость с репликацией, совместимость с львиной долей хостингов
- PostgreSQL - если важно выжать из SQL самый максимум возможностей, хранимки, триггеры и т.д.
Обе они бесплатные и достаточно распространенные. Зачем может понадобиться сменить базу (тем более - на Oracle, с переписыванием всех хранимок и т.д.), я решительно не понимаю.
SQLite - если важно и то и другое :)
Quote:
Итого, выходит, что фреймворк у нас должен получиться из того, что есть? Боюсь что это уж слишком "низкоуровневый" фреймворк, если не сказать набор библиотек =).
ну, если реализовать в dbsimple поддержку хакерской консоли, то вполне себе framework получится...
Quote:
Если обобщить функции, выполняемые любым web-приложением, то больше трех на ум не приходит:
1. Получить запрос от пользователя
2. Обработать запрос
3. Выдать результат
я бы по другому сформулировал:
1. обработка запроса.
2. генерация данных.
3. формирование вывода.

при этом в идеале скрипт обработки запроса не должен возвращать данных, а только редиректить на скрипт получения данных.

по поводу ЧПУ...
создаём таблицу такого плана:
id - номер записи
uin - урл
handler - php код, которому передаётся массив с "хвостом" урла.
например, по урлу "/market/goods/1001/edit"
мы находим самую вложенную запись с uin="/market/goods"
и передаём хэндлеру такой массив: Array('1001','edit')
а уже хэндлер может и метод класса с параметрами вызвать и просто функцию какую-нибудь, да что угодно.
в SQLite, кстати, вообще можно одним простым запросом выбрать все записи подходящие под урл. для этого примера, он вернёт записи с uin=
"/"
"/market"
"/market/goods/"
может и в других субд так можно... в MySQL такое не прокатывало...
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Mar 14, 2007 1:40 am (спустя 1 месяц 9 дней 21 час 24 секунды; написано за 5 минут 15 секунд)
   Post subject:
Reply with quote

Можно посмотреть как механизм ЧПУ реализован в других фреймворках.
Например, в CakePHP ЧПУ организовано как /[<Plugin>/]<Controller>/<Method>/<Param1>:<Value1>/,
однако есть механизм перезаписи: Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Мне кажется, что для системы администрирования можно использовать "стандартное" построение URL,
а для клиентской части использовать URL вида /<node6>/<node14>/<node23>/<Param1>:<Value1>/
Back to top
Тёмыч
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Mar 14, 2007 4:12 pm (спустя 14 часов 32 минуты; написано за 6 минут 3 секунды)
   Post subject:
Reply with quote

Наиболее правильным представляется URL вида: somehost.ru/news/2006/12/01/putin-goes-to-hollywood#comment-12.
Вы же предлагаете что-то вроде: somehost.ru/news/year:2006/month:12/day:01/article:5#comment-12, принципиального отличия от somehost.ru/news/#comment-12?year=2006&month=12&day=01&article=5 не вижу =).

Насчет администраторской пожалуй соглашусь.
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Mar 14, 2007 11:53 pm (спустя 7 часов 40 минут; написано за 2 минуты 2 секунды)
   Post subject:
Reply with quote

Смысл в том, чтобы из URL получить доступ к узлу дерева сайта. В конце концов, кто запрещает использовать роуты?
Достаточно сделать правило и можно получать доступ по специфичному запросу.
Back to top
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Fri Jun 08, 2007 7:58 pm (спустя 2 месяца 24 дня 20 часов 5 минут; написано за 5 минут 37 секунд)
   Post subject:
Reply with quote

Нашел интересный framework под размером 34 Кб под названием Picora livepipe.net/projects/picora/, главной задачей которого является трансляция URL в имена классов и методов. Также поддерживаются роуты. Мне кажется, нечто подобное могло бы стать основой CMF, который мы тут давно обсуждаем. Проблема одна - Picora написана на PHP5, в то время, как все библиотеки конструктора - на PHP4.

Вопросы ко всем заинтересованным лицам следующие:
1. Удовлетворяет ли Picora витающей идее CMF?
2. Оправдан ли безвозвратный переход на PHP5?
3. Если нет, имеет ли смысл написать что-нибудь подобное на PHP4?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Jun 14, 2007 1:04 am (спустя 5 дней 5 часов 6 минут; написано за 1 минуту 39 секунд)
   Post subject:
Reply with quote

1. Нет, не удовлетворяет. Маппинг УРЛов - это более высокий уровень абстракции, чем то, что предлагается в Конструкторе. Собственно, его можно делать совершенно по-разному и затачивать под конкретное применение.
2. Не думаю. Хотя - все зависит от слоя абстракции, на котором работает система, конечно. Для Конструктора совместимость с PHP4 обязательна.
Back to top
View user's profile Send private message Send e-mail
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 38
   поощрить/наказать


PostPosted: Mon Mar 03, 2008 11:50 am (спустя 8 месяцев 19 дней 10 часов 45 минут; написано за 1 минуту 7 секунд)
   Post subject:
Reply with quote

sourceforge.net/projects/quickfw/
посмотрите вот это
разрабатываем этот фреймворк - там довольно хороший роутер
планируется добавить роутинг и бекроутинг на регулярных выражениях
Back to top
View user's profile Send private message Send e-mail
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 38
   поощрить/наказать


PostPosted: Sat Jun 14, 2008 6:15 pm (спустя 3 месяца 11 дней 6 часов 25 минут; написано за 4 минуты 52 секунды)
   Post subject:
Reply with quote

Здраствуйте всем!
Во фреймворке довольно много изменений.
Буквально сейчас обновил в нем версию DBSimple
добавился прямой и обратный роутинг, шаблоны классов для шаблонизаторов, класс авторизации с автосессиями
подключение внешних библиотек, несколько способов передачи параметров в url и в модули
фреймворк обгоняет по скорости даже CodeIgniter, сейчас планирую прикрутить к нему DkLab_Cache, но мне там не нравится сложность интерфейса тегов - слишком много классов.
Back to top
View user's profile Send private message Send e-mail
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 38
   поощрить/наказать


PostPosted: Wed Jun 18, 2008 3:32 pm (спустя 3 дня 21 час 17 минут; написано за 1 минуту 10 секунд)
   Post subject:
Reply with quote

Прикрутил к фреймворку DkLab_Cache, правда обрезанный наполовину, думаю над тем, чтобы выкинуть интерфейс зенды - передавать без специализации типа
насколько это увеличит скорость?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Jun 24, 2008 1:52 am (спустя 5 дней 10 часов 19 минут; написано за 29 секунд)
   Post subject:
Reply with quote

Да ни на сколько практически. Зенд в данном случае совсем не является узким местом. А вот в универсальности проиграете очень сильно.
Back to top
View user's profile Send private message Send e-mail
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 38
   поощрить/наказать


PostPosted: Tue Jun 24, 2008 8:06 pm (спустя 18 часов 13 минут; написано за 2 минуты 21 секунду)
   Post subject:
Reply with quote

Ну в принципе да - увеличивает запроса на 2-3 со 120 до 122-123, но это в пределах погрешности.
Насчет универсальности не проиграю - проиграю только в сложности слежения кодом - интерфейс класса нужно будет поддерживать руками - обработка ошибок будет во время исполнения.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML