LINUX.ORG.RU

Open Web Platform - создадим новый принцип веб-разработки


0

2

Не следует привлекать новые сущности без самой крайней на то необходимости.

Уильям Оккам

Сейчас веб-разработка сталкивается с большой проблемой - сверхнизкое повторное использование кода.

Как происходит, когда разработчик начинает делать свой проект, скажем, на PHP. Сначала он идет, например, на PHP Classes. Там очень много классов. Все разные. Каждый написано по-своему. У некоторых внешний интерфейс через один класс, у других через пять, у третьих через десять и два конфига. В результате требуется изучать архитектуру каждого класса, и, что самое важное, сайт из таких “компонентов” быстро не построишь.

Тогда разработчик идет смотреть готовый фреймворк. Фреймворков на рынке с десяток. Все разные. Все сложные. Все несовместимые друг с другом. Все они, повторяю, сложные, у каждого достаточно запутанная архитектура, своя реализация MVC, разные подходы работы с БД, с шаблонами, с кодогенерацией.

И они сложные. Поэтому мало кто (в мировом масштабе) их осваивает. Поэтому мало готовых компонентов для этих фреймворков, и все равно многое надо писать самому. Компоненты от разных фреймворков не совместимы.

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

Есть, конечно, более “компонентные” решения, вроде Joomla и Drupal, но они не являются открытыми стандартами, они являются продуктами со своей историей и они тяжеловесны.

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

Это то, как разработка ведется сейчас. А теперь, как она будет вестись на платформе, которую я хочу создать.

Итак, Open Web Platform (OWP). OWP является компонентной системой. А именно: каждый блок проекта является “компонентом”, который общается с другими компонентами не напрямую, а через общий интерфейс “ядра платформы”. Пример:

	
	owp_core::call("auth", "login", 
		array("user" => "me", "password" => “123”)
	);
	$user_id = owp_core::call("auth", "user_id");

В этом примере некий управляющий компонент shell обращается к компоненту auth, который производит авторизацию пользователя, после чего возвращает user_id. Компонент shell ничего не знает о компоненте auth. Не знает, на каком тот написан языке. Из каких состоит классов. Как он разработан. Где он находится в файловой системе. Он даже может оказаться на другом сервере. Компоненту shell и его разработчикам это безразлично - они знают имя компонета auth и вызовы, которые можно ему направлять, этого совершенно достаточно.

Таких компонентов в нашей системе может быть сколько угодно, однако все они общаются через единый интерфейс owp_core::call. На файловой системе это может выглядеть так:

https://docs.google.com/document/pubimage?id=13OoGuRS2Mc6qOBivYW8K2NnroreEBTXj5usp23o8558&image_id=1wvsx9R61vjXvEN-4-tAY6JqGgALobA

Все единообразно. Если посмотреть на Class Diagram любого сколь-либо сложного “обычного” проекта, мы всегда увидим клубок ниток. Здесь мы имеем единую шину, к которой динамически подключаются разные устройства-компоненты.

Каждый компонент может быть написан как угодно. Это не важно. Главное, чтобы они все реализовывали единый внешний интерфейс, вроде такого:

interface owp_app {
	
	public function __construct($app, $process_name);
	
	public function start();
	
	public function autoload();
	
	public function stop();
	
	public function install();
	
	public function uninstall();
	
	public function call($method, $data);
}

Что находится “за” этим интерфейсом - не важно. Вам достаточно написать мануал (не сложнее команды man в Linux) для вашего компонента, после чего вы можете делать с бекэндом все, что захотите.

При этом компонент даже не обязательно должен быть написан как на PHP, как здесь. Ядро может иметь “драйвера” для различных языков разработки и вызывать компоненты между языками.

Оцените, как при таких условиях упрощается рефакторинг. При рефакторинге “внутри” компонента другие не затрагиваются никак, поэтому проблем не возникает. Если же рефакторинг касается внешнего интерфейса, то этот интерфейс простой, поэтому его изменение сводится к простому “поиск и замена” по всему проекту.

И это еще не все преимущества такого подхода. У нас есть компоненты, они все однотипны. Одни компоненты могут использовать другие. Значит, можно создать единый репозиторий с зависимостями, как для Linux. Тогда установка одного компонента автоматически повлечет за собой установку связанных. Поскольку все они независимы друг от друга, вы вообще не заметите то, что что-то там установилось. Все просто работает.

Разные компоненты могут нести разный функционал. Одни могут быть “базовыми”, вроде mysql-компонента, другие реализовывать логику проекта, третьи генерировать HTML-блоки для вторых (VC и M из MVC соответственно). Однако архитектурно они все являются однотипными.

Теперь посмотрим, что будет, если мы хотим сделать сайт. Мы заходим в глобальный репозиторий компонентов и скачиваем оттуда все необходимое. При этом все вспомогательные компоненты, необходимые для работы нужных нам, будут рекурсивно установлены автоматически. Мы не должны думать, что нужно для работы наших компонентов. Оно уже установлено. Теперь нам остается только дописать “свои” компоненты, которые используют установленные и реализуют уникальный функционал нашего сайта. Всё.

А теперь сравните это с описанием “современной” разработки из первых абзацев.

Итак, сейчас я занимаюсь разработкой такой платформы. Она частично написана. Однако, для того чтобы такая платформа стала мировым стандартом, мне нужны мнения разработчиков. Только они знают, как надо скорректировать код и архитектуру такой платформы, чтобы им было удобно ей пользоваться. Я с радостью выслушаю все требования, которые вы выскажите. Я особенно буду рад, если встреча произойдет вживую, с перекрестным изучением кода (у меня есть возможность организовать это в офисе на берегу Москвы-реки, с хорошей экологией и бесплатным Wi-Fi).

Жду ваших писем.

Дмитрий Лейкин

Email: dilesoft@gmail.com Skype: dilesoft ICQ: 67937292 Телефон: +7 (903) 125 33 68

на похэпэ пишут только школоло (и то не все) и умственно отсталые

много буков и ниочом

подай объяву в хх.ру, жоб.ру или куда там, найми студентов и фигач саеты-визитки, а на ЛОР больше не заходи

anonymous
()

> Сначала он идет, например, на PHP Classes.

Был там. Тихий ужас. Кончилось PEAR библиотекой.

Все они, повторяю, сложные, у каждого достаточно запутанная архитектура, своя реализация MVC, разные подходы работы с БД, с шаблонами, с кодогенерацией.


«Своя» реализация MVC - не страшно. Раз она есть, впишемся. Разные подходы при работе с БД решаются Doctrine. Или, если не лень, делаем простенький Mapper. Сложности в изучении шаблонизатора в любом фреймворке не вижу.
Тут главное «M». Модель свою реализовать все равно придется, если конечно речь не идет о «сайтике». Тогда проще Joomla + K2 или Drupal, по вкусу.

Мы заходим в глобальный репозиторий компонентов и скачиваем оттуда все необходимое.


Удачи!

Мое мнение: «Не взлетит!»

valich ★★★
()
Ответ на: комментарий от anonymous

> на похэпэ пишут только школоло (и то не все) и умственно отсталые

Логинимся, и пытаемся истекать жыром персонально.

valich ★★★
()
Ответ на: комментарий от valich

шкворец маловат, опасаюсь за него :3

anonymous
()
owp_core::call("auth", "login", 
      array("user" => "me", "password" => “123”)
   );
   $user_id = owp_core::call("auth", "user_id");
include_once "user.php";
include_once "auth.php";
auth::instance()->login("me", "123");
$user_id = auth::instance()->getUser()->id;

что лучше?

RR
()
Ответ на: комментарий от RR

>> Однако, для того чтобы такая платформа стала мировым стандартом, мне нужны мнения разработчиков.

You made my day

RR
()

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

Miguel ★★★★★
()

>Все разные. Все сложные
Так и запишем: не осилил.

В пхп есть замечательные Yii и symphony.
В перле - mojolicious, catalyst, dancer.
В рубях - рельсы и синатра.
На питоне - джанга.

Хватит изобретать велосипеды.

iSage ★★★★
()
Ответ на: пыхопроблемы от stevejobs

>> веб-разработки

man .net, man jvm


Не верю (с).

Дмитрий Лейкин

Старший менеджер группы повышения эффективности бизнеса в компании «КПМГ». Окончил экономический факультет МГУ им. М.В. Ломоносова. Руководитель направления по организационному проектированию компании «КПМГ» в России и странах СНГ.



Мдя

valich ★★★
()
Ответ на: комментарий от iSage

не говоря уже про тяжелый почти ынтырпрайзный zend fw

anonymous
()
interface owp_app {
   
   public function __construct($app, $process_name);
   
   public function start();
   
   public function autoload();
   
   public function stop();
   
   public function install();
   
   public function uninstall();
   
   public function call($method, $data);
}

Так в Друпале это всё есть уже, только не в объектном стиле, а в функциональном.

mantar
()

> Однако, для того чтобы такая платформа стала мировым стандартом, мне нужны мнения разработчиков.

Не вижу тегов [властелин][мировое господство]

Vit ★★★★★
()

забыл еще man OSGi, там есть понятие бандла и все твои старты и стопы уже реализованы =) а из-за универсальности jvm, можно юзать скажем Equinox в многоязычной среде.

stevejobs ★★★★☆
()

Ох лол, изобрели зопу на похапе.

vasilenko ★★
()

>Тогда разработчик идет смотреть готовый фреймворк. Фреймворков на рынке с десяток. Все разные. Все сложные. Все несовместимые друг с другом. Все они, повторяю, сложные, у каждого достаточно запутанная архитектура, своя реализация MVC, разные подходы работы с БД, с шаблонами, с кодогенерацией.

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

Что находится “за” этим интерфейсом - не важно. Вам достаточно написать мануал (не сложнее команды man в Linux) для вашего компонента, после чего вы можете делать с бекэндом все, что захотите.

Вот это да, новые веяния в программировании. Раньше такое точно-точно никто не делал!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.