W frameworkW framework, краткий обзор

Введение

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'у будут появляться по мере моих возможностей и сил.

Комментарии (26)

  • avatar
  • fog
  • 05 мая 2011, 15:44
  • #
  • 0
Что-то не увидел… а предполагается наличие каких то киллер-фич?
Что-то не увидел

что именно не увидел? Там по адресу wframework.com/demo/ есть картинка с большой w в формате *.svg и три ссылки.
а предполагается наличие каких то киллер-фич?

не понял суть вопроса
что именно не увидел?
Киллер-фич =) А по поводу демо, я вижу вот что (FF 3.6.10):
Пожалуйста, обновите Ваш браузер! В текущей версии браузера, возможно не корректное отображение некоторых страниц.
На текущий момент скрипты в ff 3.6.x работают корректно! просто выводится сообщение, говорящее тебе о том что надо обновить браузер
Ты чо как старпер ваще на 3.6 сидишь? Ты бы еще на нетскейпе сидел!
Только майнфилд, только хардкор!

:3
в начале разработки в 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 интерфейс
а где перемешивание когда скажем в том же GWT?=)

Я понял общий смысл. Спасибо.
а где перемешивание когда скажем в том же GWT?=)
Часть кода которая должна находится на клиенте, пишется на java а потом транслируется в javascript и далее передается на клиент. В моем случае часть кода, который должен работать на клиенте изначально написана на javascript, и насколько мне известно, на данный момент программная оптимизация кода во много раз уступает человеческой.

Пожалуй особенность моего фреймворка является плагин w.area.js. HTML-страницу условно можно разбить на несколько областей, например шапка, подвал, rightbar, контент, так вот когда человек кликает по ссылке, то всю страницу перезагружать не нужно, а нужно перезагрузить одну из областей(или несколько связанных областей), этим и занимается плагин w.area.js. Это чем то похоже на страницу построенную на фреймах, но гораздо удобнее и функциональней, а весь остальной код фреймворка «заточен» под этот плагин.
Короче ты изобрел плагин для jQuery и решил замутить на этом киллер-фреймворк. Лол.
Короче ты изобрел плагин для jQuery и решил замутить на этом киллер-фреймворк. Лол.
Это не так.
Что такое w framework можешь почитать сдесь, в 10 строк объяснить это у меня не выходит.
Не обижайся. Ни в коем случае не хочу отбить у тебя охоту что-то делать, или разрабатывать, но мне кажется ты изначально выбрал не совсем удачный путь реализации идеи. Дело в том, что:
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, пиши, что тебе интересно, никого не слушай. :-) Лично я поддерживаю разработчиков в любом начинании, каким бы странным оно не казалось окружающим.
спасибо за поддержку, хоть я ее даже и не ощущаю
хм, разработка проекта прекращена? а зря…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.