Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Open Web Platform - новый принцип веб-разработки 
:(
    Опции темы
DileSoft
Дата 2.7.2011, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



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

Уильям Оккам


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

Как происходит, когда разработчик начинает делать свой проект, скажем, на 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. На файловой системе это может выглядеть так:

user posted image

Все единообразно. Если посмотреть на 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: [email protected]
Skype: dilesoft
ICQ: 67937292
Телефон: +7 (903) 125 33 68
PM MAIL   Вверх
systemIV
Дата 2.7.2011, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 28.3.2011

Репутация: -1
Всего: -1



Идея понятна, но как по мне это глупость. Посмотри на фримворк Yii. Там тоже всё разделено. Щас каждый будет(каждая компания и разработчик) по разному реализовывать эти компоненты, и твоя архитектура ничем не будет отличатся от других. 
PM ICQ Skype   Вверх
DileSoft
Дата 2.7.2011, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Цитата(systemIV @ 2.7.2011,  10:14)
Идея понятна, но как по мне это глупость. Посмотри на фримворк Yii. Там тоже всё разделено. Щас каждый будет(каждая компания и разработчик) по разному реализовывать эти компоненты, и твоя архитектура ничем не будет отличатся от других.

Так в том то и дело, что компоненты ВНУТРИ реализованы по-разному, но если будет соблюдаться внешний интерфейс, то они все останутся совместимыми!
PM MAIL   Вверх
Absinthe
Дата 2.7.2011, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

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

Цитата

Тогда разработчик идет смотреть готовый фреймворк. Фреймворков на рынке с десяток. Все разные. Все сложные. Все несовместимые друг с другом. 
 Неверно.
Многие фреймворки расчитаны на loose coupling.

Цитата

Поэтому мало кто (в мировом масштабе) их осваивает.
 Мало кто (в мировом масштабе) имеет опыт работы 3+ лет. И, мне кажется, эти 2 цифры сравнимы smile

Цитата

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

А какие отличия от:
Код

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

кроме отсутствия поддержки автодополнения и контроля ошибок со стороны IDE?

Цитата

Компоненту shell и его разработчикам это безразлично - они знают имя компонета auth и вызовы, которые можно ему направлять, этого совершенно достаточно.
 Как бы это и в интаксисе есть: имя_компонента::вызов().
Данная штука называется инкапсуляцией.
ru.wikipedia.org/wiki/Инкапсуляция_(программирование)
Цитата

Инкапсуля́ция — свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (то, что у него внутри), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные. При этом пользователю предоставляется только спецификация (интерфейс) объекта.


Цитата

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

Цитата

Главное, чтобы они все реализовывали единый внешний интерфейс, вроде такого:
 А в чем тогда разница с методом 2004 года? Для них абсолютно так же можно сделать адаптеры. Только без бессмысленных вызовов в ядро.
Материал: ru.wikipedia.org/wiki/Адаптер_(шаблон_проектирования)

Цитата

А теперь сравните это с описанием “современной” разработки из первых абзацев.
 Сейчас не 2004 год. Предпосылки создания были не верны, в 2011 так не делают.

Добавлено через 1 минуту и 43 секунды
Цитата

Так в том то и дело, что компоненты ВНУТРИ реализованы по-разному, но если будет соблюдаться внешний интерфейс, то они все останутся совместимыми!
 Пичалька. Учи основы основ ООП. Могу конкретнее, если интересует, но в твоих интересах учить все.
PM MAIL   Вверх
DileSoft
Дата 2.7.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Расскажи конкретнее. Разница существенная. Дело в том, что обращение к классу предполагает как минимум, что класс написан на том же языке, что и класс, который вызывает, плюс по тем же принципам. Это сужает применение и создает лишние неудобства при разработке. То что IDE подхватывает автоматически, показывает только то, что IDE подвязано на внутреннюю реализацию компонентам. Плюс, в третьих, компонент - это инкапсулированная совокупность классов, а не один класс. Ко всем классам одного компонента обращаются через один интерфейс, а не через множество отдельных файлов.

Добавлено через 3 минуты и 20 секунд
Цитата(Absinthe @  2.7.2011,  10:23 Найти цитируемый пост)
 Сейчас не 2004 год. Предпосылки создания были не верны, в 2011 так не делают.

И как же делают сейчас?
PM MAIL   Вверх
Absinthe
Дата 2.7.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

И как же делают сейчас?
 Есть PEAR(хотя я считаю его тоже устаревшим) - набор библиотек в одном стиле.
Есть Zend Framework, который можно использовать не как фреймворк, а как набор библиотек.

Цитата

Дело в том, что обращение к классу предполагает как минимум, что класс написан на том же языке, что и класс, который вызывает, плюс по тем же принципам.
 У нас много языков? Про принципы читай в посте выше: адаптеры.

Цитата

То что IDE подхватывает автоматически, показывает только то, что IDE подвязано на внутреннюю реализацию компонентам
 Ложь. IDE умеют определять на лету типы функций(несмотря на то, что язык динамический), количество параметров и т.д.
И все это подсказывать.

Цитата

Плюс, в третьих, компонент - это инкапсулированная совокупность классов, а не один класс. Ко всем классам одного компонента обращаются через один интерфейс, а не через множество отдельных файлов.
 В компонентах многие классы для внутреннего использования. На самом деле придется работать лишь с теми, которые для этого предназначены. И их нельзя объединять в один.
И сливание их в один класс породит ###код(например классов атачмент и мейлер). У тебя как я понимаю это и должно произойти.
PM MAIL   Вверх
DileSoft
Дата 2.7.2011, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Цитата(Absinthe @  2.7.2011,  13:00 Найти цитируемый пост)
Есть PEAR(хотя я считаю его тоже устаревшим) - набор библиотек в одном стиле.
Есть Zend Framework, который можно использовать не как фреймворк, а как набор библиотек.

PEAR не универсален. Там мало компонентов, нельзя из кирпичиков сделать почти готовый сайт. У фреймворков тоже.


Цитата(Absinthe @  2.7.2011,  13:00 Найти цитируемый пост)
Ложь. IDE умеют определять на лету типы функций(несмотря на то, что язык динамический), количество параметров и т.д.
И все это подсказывать.

Так я про это и говорю. Кстати, можно сделать OWP таким, чтобы там и IDE работал, с помощь кодогенерации оберток. Уже пишу это.


Цитата(Absinthe @  2.7.2011,  13:00 Найти цитируемый пост)
В компонентах многие классы для внутреннего использования. На самом деле придется работать лишь с теми, которые для этого предназначены. И их нельзя объединять в один.
И сливание их в один класс породит ###код(например классов атачмент и мейлер). У тебя как я понимаю это и должно произойти. 

Нет. У меня будет единый класс-внешний интерфейс. За ним может быть какое угодно разделение по внутренним классам, главное, то что для внешних компонентов эта каша будет недоступна.
PM MAIL   Вверх
Absinthe
Дата 2.7.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



DileSoft, окей, все это понятно, типа адаптер ты сделал, косяки с IDE появились(ошибки на момент редактирования стали ошибками момента исполнения).
Но плюсы какие? Хоть ОДИН плюс?

Ты по сути сделал возможность создания адаптера для классов. Все бы хорошо.. но эта возможность и так дарована нам синтаксисом. В чем фишка?
Зачем изобретать сущность худшего качества чем в синтаксисе?
PM MAIL   Вверх
DileSoft
Дата 2.7.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Цитата(Absinthe @ 2.7.2011,  13:48)
DileSoft, окей, все это понятно, типа адаптер ты сделал, косяки с IDE появились(ошибки на момент редактирования стали ошибками момента исполнения).
Но плюсы какие? Хоть ОДИН плюс?

Ты по сути сделал возможность создания адаптера для классов. Все бы хорошо.. но эта возможность и так дарована нам синтаксисом. В чем фишка?
Зачем изобретать сущность худшего качества чем в синтаксисе?

Речь о стандарте. Сейчас адаптеры есть не везде, все разные и не совместимым друг с другом. Должен быть единый стандарт и репозиторий.
PM MAIL   Вверх
Absinthe
Дата 2.7.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



А теперь вопрос номер 1: зачем нужны адаптеры?
PM MAIL   Вверх
DileSoft
Дата 3.7.2011, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Цитата(Absinthe @ 2.7.2011,  14:21)
А теперь вопрос номер 1: зачем нужны адаптеры?

А зачем вы их используете?
PM MAIL   Вверх
WolfAlone
Дата 3.7.2011, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Цитата(DileSoft @  2.7.2011,  09:19 Найти цитируемый пост)
В итоге, разработчик в лучшем случае осиливает готовый фреймворк и пишет проект под него, в худшем и более частом - пишет что-то новое свое, разумеется, абсолютно несовместимое со всем остальным.

Если я правильно Вас понял, вы как раз собираетесь заняться тем, о чём написано в предложении выше. Простите за сарказм, но Вам не удалось освоить готовый фреймворк?

Если честно, мне не совсем понятно, что Вы хотите реализовать? Аналог ASP.net (.net платформы) на PHP? Возможно, в таком случае, действительно стоить посмотреть в сторону именной этой технологии?

Это сообщение отредактировал(а) WolfAlone - 3.7.2011, 00:17


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
WolfAlone
Дата 3.7.2011, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Кстати о "сложных PHP-фреймворках". На мой взгляд, понимание таких вещей как "ООП", "сложные фреймворки" и прочее - приходит исключительно с опытом, и мало зависит от количества попыток понять, о чём же говориться к книге (учебнике). Однажды в жизни наступает такой момент, когда работаешь, работаешь... ложишься спать... Потом просыпаешься, и сразу всё становиться (понятно) на свои места. Казавшийся вчера сложным и не постижимым PHP-фреймворк сегодня вдруг начинает казаться предельно очевидным...


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
systemIV
Дата 3.7.2011, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 28.3.2011

Репутация: -1
Всего: -1



Цитата(WolfAlone @  3.7.2011,  01:17 Найти цитируемый пост)
Кстати о "сложных PHP-фреймворках". На мой взгляд, понимание таких вещей как "ООП", "сложные фреймворки" и прочее - приходит исключительно с опытом, и мало зависит от количества попыток понять, о чём же говориться к книге (учебнике). Однажды в жизни наступает такой момент, когда работаешь, работаешь... ложишься спать... Потом просыпаешься, и сразу всё становиться (понятно) на свои места. Казавшийся вчера сложным и не постижимым PHP-фреймворк сегодня вдруг начинает казаться предельно очевидным... 

"С проблемой надо переспать"=)
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1089 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.