W framework — web framework написанный на двух языках программирования PHP(серверная часть) и JavaScript(клиентская часть), и предназначений для создания интерактивных web-приложений. Под web-приложением понимается один из следующих типов сайтов: социальные сети, биллинговые системы, админ-панели, различные online-менеджеры и вообще на w framework'e может работать любой сайт, который не требует индексирования своих страниц поисковыми роботами.
w framework в действии
Что было более понятно о чем идет речь, Вы можете просмотреть пример написанного мною web-приложения по следующему адресу - http://wframework.com/demo/. На оригинальность мое приложение не претендует, но все же позволят показать принцип работы самого w framework'a и работу некоторых php-классов и w-плагинов. Теперь о самом web-приложении: там Вы сможете заметить регистрацию, регистрация настоящая с проверкой личности при помощи email; так же Вы можете заметить необычную каптчу, суть этой каптчи в том, что человек способен видеть оптические иллюзии, а компьютер нет; после регистрации Вы можете перейти на страницу своего профиля и редактировать там некоторые данные, также Вы можете просматритривать страницы других профилей, но только тех профилей у которых указан противоположный пол(это что то типа социальной сети знакомств). Email адреса, указываемые пользователями нигде и некогда использоваться не будут!
системные требования
— сервер с LAMP в состав которого входит PHP не ниже чем 5.2.9, а лучше PHP 5.3.5 собранный с поддержкой mysqlnd;
— браузер с поддержкой JavaScript;
— актуальная версия w framewor'a;
Архитектура и принцип работы
W framework реализует MC-CV паттерн проектирования, M(модель) — php код основная задача которого чтение/запись данных из/в хранилища данных; С(контроллер) — отвечает за формирование запроса к M и передачи передачи полученных данных к V, за его работу отвечают системные классы и плагины, реализован в виде набора параметров; V(вид) — произвольный js код основная задача которого отображение полученных данных в удобной форме для человека. Так же стоит упомянуть о клиентской системе шаблонирования, которая занимается формирование html-фрагментов.
Теперь стоит наверное описать порядок, способы и количество запросов в w framework'e. Первое — это первая загрузка, загружается html-страница, но которой содержатся ссылка для загрузки клиенткой части framework'a, загружается автоматически, некоторые системные сообщения, и html-фрагменты для шаблонизатора. Далее после загрузки и инициализации клиенткой части ядра системы, производятся запросы данных с сервера, полученные данные отображается при помощи кода в V.
Далее короткий перечень особенностей w framework'a:
— все запросы от клиента к серверу происходят асинхронно, при помощи ajax или iframe;
— поддержка мультипроектов, неограничение число проектов может работать на едином ядре с использованием общих экшенов;
— контроллер C реализован в виде набора параметров, что значительно упрощает архитектуру всего frameworka и работу системы кэширования;
— легко расширяем, расширение может иметь вид php класса или w плагина(w плагин практически идентичен jQuery плагину);
— поддержка локализации, полность реализуется на клиентской стороне;
— особенности серверной части w framework'а:
— автозагрузка всех php классов;
— Memcache;
— MySQL;
— классы для создания резервных копий;
— классы для работы с tar архивами;
— классы для работы с сессиями и привилегиями;
— особенности клиентской части w framework'а:
— система избирательно запроса контета(настраивается пользователем);
— клиентская система шаблонирования;
— средства для работы с формами;
В итоге
В результате моей работы получился web-framework, с нестандартной архитектурой, но вполне пригодных для производства некоторых типов web-приложений. На данный момент архитектура framework'a является полностью законченной и в будущем вряд ли будет подвержена изменению, что позволит писать переносимый код, в пределах w framework'a.
W framework распространяется под лицензией MIT. http://wframework.com/ — официальный сайт проекта; http://wframework.blogspot.com/ — блог посвященный w framework'у; https://github.com/pandora2510/wframework/ — страница проекта на github.com; http://wframework.com/demo/ — пример рабочего приложения написанного на w framework'e;
Документация и руководства по w framework'у будут появляться по мере моих возможностей и сил.
в начале разработки в ff 3.x не работали некоторые функции корректно, поэтому было такое требование к браузеру, но на данный момент скрипты корректно работают в ff 3.6.xx
не понимаю в чем плюшка данного фреймворка. Попытка реализовать GWT-возможности с помощью «jQuery» и php?..
Обычно php выбирают для тех веб-приложений, которым НЕ нужна 100% асинхронность, такие как fb, vk — там есть только некоторые вещи, которые работают асинхронно. Когда же необходима 100% интерактивность, то берут gwt, vaadin, cappuccino и т.д.
Так что я наверное повторю вопрос fog'а а где киллер-фичи или хотя бы какие-то достоинства?
ставка делалась простоту и доступность при создании web-приложений
gwt, vaadin, cappuccino
в моем фрамеворке не происходит перемешивание кода, js — отвечает за логику, а php только за чтение/запись данных(на практике еще сериализацию, сессии и авторизацию)
ну, если производительности php будет мало, серверную часть перепишу на каком либо другом языке(скорей всего на javascript), программы которого работают через fastcgi интерфейс
Часть кода которая должна находится на клиенте, пишется на java а потом транслируется в javascript и далее передается на клиент. В моем случае часть кода, который должен работать на клиенте изначально написана на javascript, и насколько мне известно, на данный момент программная оптимизация кода во много раз уступает человеческой.
Пожалуй особенность моего фреймворка является плагин w.area.js. HTML-страницу условно можно разбить на несколько областей, например шапка, подвал, rightbar, контент, так вот когда человек кликает по ссылке, то всю страницу перезагружать не нужно, а нужно перезагрузить одну из областей(или несколько связанных областей), этим и занимается плагин w.area.js. Это чем то похоже на страницу построенную на фреймах, но гораздо удобнее и функциональней, а весь остальной код фреймворка «заточен» под этот плагин.
Не обижайся. Ни в коем случае не хочу отбить у тебя охоту что-то делать, или разрабатывать, но мне кажется ты изначально выбрал не совсем удачный путь реализации идеи. Дело в том, что:
1) Фреймворк реализовать трудно, а хороший — еще труднее. Прежде всего это куча взаимосвязанных компонентов, которые решают самые разнообразные задачи, и которые управляют пользовательским кодом. В твоем случае, на фреймворк это не тянет, по крайней мере на серверной стороне.
2) Задачи бывают разные. Идея хороша. Но HTML5 уже делит страницу на области. Во-вторых, реализация страницы может быть самой разнообразной.
То есть, если ты хочешь воплотить идею — то более удачный вариант — это плагин к библиотеке (подчеркиваю к библиотеке JS). То есть, сделать не код, который будет управлять пользовательским кодом, а код, который можно использовать в своих целях.
Реализовать блоки или подобное — для разных приложений требования могут быть совершенно разные. Ведь никто не мешает взять к примеру Flask, который будет выдавать данные в JSON. А на клиенте написать js-приложение, которое будет обновлять содержимое посредством AJAX и запрашивать нужные данные у сервера. Что это нам дает? Это дает полную, подчеркиваю, полную свободу в выборе фреймворка: будь то Symphony, Sinatra, Flask или Pylons, RoR или Django, или вообще самописное приложение с нуля. Мы свободны. Мы так же свободны в реализации клиентской стороны, свободны, и можем делать так, как надо нам. А твоя библиотека могла бы предоставить быстрый интерфейс для дергания обновлений, или вызова callbacks для тех, или иных действий с DOM элементами.
Надеюсь, я смог донести свою мысль )))
Ну и кроме того. Блоки в зависимости от страницы могут меняться. Гораздо лучше их контролировать на стороне сервера, и использовать кэширование.
Я бы был рад, если бы был удобный плагин, в виде к примеру автоматического dispatcher'а.
Объясню более конкретно. Мы храним «активные» DOM-элементы (то есть те, которые должны выполнять какие-то события). Пусть, это будут даже объекты того же jQuery. Мы просто где-то пишем функции для событий. А в одном месте, объявляем кортежи (элемент, событие, callback). И dispatcher автоматически инициализирует callbacks. То есть некая реализация синтаксического сахара, если можно так сказать. Но это явно не тянет на фреймворк с серверной стороной )
Я высказал свое мнение, и как оно более привлекательно выглядит. Если ему нравится, он может делать как хочет. Я же не принуждаю его делать по другому. Или высказывание своего мнения — это не кафильфо?
Ну и кроме того. Блоки в зависимости от страницы могут меняться. Гораздо лучше их контролировать на стороне сервера, и использовать кэширование.
Нет, лучше их контролировать на клиенте, так у сервера остается менше задач, о которых иму надо заботится. По поводу кэширования, лучше наверное пример для наглядности: есть блок «body», в котором должна выводится фраза «hello world», эти данные запрашиваются у сервера, а сервере уже решается взять данные из кэша или БД(например), то есть запрос происходит в любом случае.
На счет плагина, не знаю, при разработке какого либо приложения с таким плагином придется писать очень много лишнего кода, когда все поддерживается из коробки, это существенно упрощает решение задач.
(подчеркиваю к библиотеке JS)
Дело в том что js библиотек много, и не все в своей разработке использую jQuery, а писать плагин под каждую библиотеку — это лишняя работа.
Ну и кроме того. Блоки в зависимости от страницы могут меняться. Гораздо лучше их контролировать на стороне сервера, и использовать кэширование.
Я бы был рад, если бы был удобный плагин, в виде к примеру автоматического dispatcher'а.
Объясню более конкретно. Мы храним «активные» DOM-элементы (то есть те, которые должны выполнять какие-то события). Пусть, это будут даже объекты того же jQuery. Мы просто где-то пишем функции для событий. А в одном месте, объявляем кортежи (элемент, событие, callback). И dispatcher автоматически инициализирует callbacks. То есть некая реализация синтаксического сахара, если можно так сказать. Но это явно не тянет на фреймворк с серверной стороной )
framework — можно перевести как «рабочие рамки», выходит так, что тебе не нравятся мною предложенные «рамки».
Первое, flash — для флеша можно написать порт клиентской стороны, это большого труда не составит, в будущем скорее всего так и будет сделано.
Второе, серверная сторона — такое разнообразие реализаций на различных языках не будет, наиболее вероятные языки для написания порта node.js(javascript) или python.
А на счет свободы, то расширить существующий php framework, какими либо php классами ни составит никакого труда, как это сделать я опишу в документации(это не код писать, гораздо хуже выходит)
Ну как переводится framework, это чуть другое. Суть в том, что несмотря на то, что ты предоставляешь удобные средства для использования твоей идеи, ты не предоставляешь удобных средств для разработки приложения в целом. То есть, одному потянуть хорошую альтернативу к примеру уровня Django/Symfony или Rails — грубо говоря трудно, и на это очень много времени надо.
То есть, это грубо говоря, все равно приведет к написанию большого количества кода для реализации другой части функционала. )
Тогда не лучше ли свои наработки реализовать на базе существующего фреймворка? В виде форка или плагина, а многие популярные фреймворки это позволяют делать легко )
В общем я не против идеи, и поддерживаю. Просто думаю насчет целесообразности появления еще одного фреймворка, против целесообразности расширения существующих )
Просто думаю насчет целесообразности появления еще одного фреймворка, против целесообразности расширения существующих )
Это только время покажет…
Тогда не лучше ли свои наработки реализовать на базе существующего фреймворка? В виде форка или плагина
Нет не лучше, если брать уже готовый «продукт» и создавать на базе него свой продукт, то это в конечном результате может негативно сказаться на производительности за счет использования лишних абстрактных слоев кода и тогда остается один выход — переписывать все заново.
chertjaga, пиши, что тебе интересно, никого не слушай. :-) Лично я поддерживаю разработчиков в любом начинании, каким бы странным оно не казалось окружающим.
что именно не увидел? Там по адресу
не понял суть вопроса
Только майнфилд, только хардкор!
:3
Обычно php выбирают для тех веб-приложений, которым НЕ нужна 100% асинхронность, такие как fb, vk — там есть только некоторые вещи, которые работают асинхронно. Когда же необходима 100% интерактивность, то берут gwt, vaadin, cappuccino и т.д.
Так что я наверное повторю вопрос fog'а а где киллер-фичи или хотя бы какие-то достоинства?
ставка делалась простоту и доступность при создании web-приложений
в моем фрамеворке не происходит перемешивание кода, js — отвечает за логику, а php только за чтение/запись данных(на практике еще сериализацию, сессии и авторизацию)
ну, если производительности php будет мало, серверную часть перепишу на каком либо другом языке(скорей всего на javascript), программы которого работают через fastcgi интерфейс
Я понял общий смысл. Спасибо.
Пожалуй особенность моего фреймворка является плагин w.area.js. HTML-страницу условно можно разбить на несколько областей, например шапка, подвал, rightbar, контент, так вот когда человек кликает по ссылке, то всю страницу перезагружать не нужно, а нужно перезагрузить одну из областей(или несколько связанных областей), этим и занимается плагин w.area.js. Это чем то похоже на страницу построенную на фреймах, но гораздо удобнее и функциональней, а весь остальной код фреймворка «заточен» под этот плагин.
Что такое w framework можешь почитать
1) Фреймворк реализовать трудно, а хороший — еще труднее. Прежде всего это куча взаимосвязанных компонентов, которые решают самые разнообразные задачи, и которые управляют пользовательским кодом. В твоем случае, на фреймворк это не тянет, по крайней мере на серверной стороне.
2) Задачи бывают разные. Идея хороша. Но HTML5 уже делит страницу на области. Во-вторых, реализация страницы может быть самой разнообразной.
То есть, если ты хочешь воплотить идею — то более удачный вариант — это плагин к библиотеке (подчеркиваю к библиотеке JS). То есть, сделать не код, который будет управлять пользовательским кодом, а код, который можно использовать в своих целях.
Реализовать блоки или подобное — для разных приложений требования могут быть совершенно разные. Ведь никто не мешает взять к примеру Flask, который будет выдавать данные в JSON. А на клиенте написать js-приложение, которое будет обновлять содержимое посредством AJAX и запрашивать нужные данные у сервера. Что это нам дает? Это дает полную, подчеркиваю, полную свободу в выборе фреймворка: будь то Symphony, Sinatra, Flask или Pylons, RoR или Django, или вообще самописное приложение с нуля. Мы свободны. Мы так же свободны в реализации клиентской стороны, свободны, и можем делать так, как надо нам. А твоя библиотека могла бы предоставить быстрый интерфейс для дергания обновлений, или вызова callbacks для тех, или иных действий с DOM элементами.
Надеюсь, я смог донести свою мысль )))
Я бы был рад, если бы был удобный плагин, в виде к примеру автоматического dispatcher'а.
Объясню более конкретно. Мы храним «активные» DOM-элементы (то есть те, которые должны выполнять какие-то события). Пусть, это будут даже объекты того же jQuery. Мы просто где-то пишем функции для событий. А в одном месте, объявляем кортежи (элемент, событие, callback). И dispatcher автоматически инициализирует callbacks. То есть некая реализация синтаксического сахара, если можно так сказать. Но это явно не тянет на фреймворк с серверной стороной )
Нет, лучше их контролировать на клиенте, так у сервера остается менше задач, о которых иму надо заботится. По поводу кэширования, лучше наверное пример для наглядности: есть блок «body», в котором должна выводится фраза «hello world», эти данные запрашиваются у сервера, а сервере уже решается взять данные из кэша или БД(например), то есть запрос происходит в любом случае.
На счет плагина, не знаю, при разработке какого либо приложения с таким плагином придется писать очень много лишнего кода, когда все поддерживается из коробки, это существенно упрощает решение задач.
Дело в том что js библиотек много, и не все в своей разработке использую jQuery, а писать плагин под каждую библиотеку — это лишняя работа.
Первое, flash — для флеша можно написать порт клиентской стороны, это большого труда не составит, в будущем скорее всего так и будет сделано.
Второе, серверная сторона — такое разнообразие реализаций на различных языках не будет, наиболее вероятные языки для написания порта node.js(javascript) или python.
А на счет свободы, то расширить существующий php framework, какими либо php классами ни составит никакого труда, как это сделать я опишу в документации(это не код писать, гораздо хуже выходит)
То есть, это грубо говоря, все равно приведет к написанию большого количества кода для реализации другой части функционала. )
Тогда не лучше ли свои наработки реализовать на базе существующего фреймворка? В виде форка или плагина, а многие популярные фреймворки это позволяют делать легко )
В общем я не против идеи, и поддерживаю. Просто думаю насчет целесообразности появления еще одного фреймворка, против целесообразности расширения существующих )
Нет не лучше, если брать уже готовый «продукт» и создавать на базе него свой продукт, то это в конечном результате может негативно сказаться на производительности за счет использования лишних абстрактных слоев кода и тогда остается один выход — переписывать все заново.