Знакомство с Oro Platform
Привет хабр! На днях состоялся релиз молодой open source платформы Oro Platform (BAP). К сожалению, данное событие не было высветлено в русскоговорящей части интернета, поэтому хотел бы с вашего позволения восполнить данное упущение.Эта статья имеет обзорный характер, так как является вступлением в цикл публикаций о платформе. Кому интересно, что же это такое — добро пожаловать под кат.BAP (Business Application Platform) — грозное название, платформа для разработки бизнес приложений. Думаю, что каждый из нас сталкивался с тем, что во время реализации той или иной задачи, замечаешь ее сходство с уже существующей с аналогичной функциональностью сервиса/программы, которую вы когда-либо использовали. Так бы и хотелось взять вот этот кусочек приложения к себе, немного подпилить и voila! С этой целью и было принято решение сделать платформу, используя которую можно по максимуму сконцентрироваться на разработке бизнес домена приложения, а рутинные задачи возложить на ее плечи.
Хотелось бы для начала сказать пару слов о том, кто стоит у истоков разработки данного продукта, дате его рождения, о мотивации, перспективах и уже достигнутых успехах.
Экскурс в историю Рождение Oro Platform прямо связано со стартом разработки первого продукта, который на ней написан — OroCRM. В декабре 2012 года Дима Сорока, Yoav Kutner и Jary Carter, которые многим известны в мире e-commerce по своей работе в корпорации Magento, в том числе Yoav как один из соучредителей, решили воплотить в жизнь новый проект CRM системы для бизнеса, основанного на электронной коммерции. Думаю, что сама CRM — это тема отдельного поста, поэтому пока забудем о ней.Со стартом нового проекта появился ряд стандартных задач, которые требовалось решить: REST + SOAP API, data grids + фильтрация, поиск, импорт/експорт, системные настройки, миграции данных, планировщик задач (cron tasks) и т.д. К сожалению, мир PHP, не особо богат на комплексные CMF решения, имеющие хотя бы часть, упомянутого функционала. Лично меня смущают магазины и CRM на Word Press, вспоминается CRM на базе Redmine и даже форк Magento, с которой вырезан функционал, относящийся к catalog/sales. Именно на этом этапе был замечен недостаток качественного решения в данной области. Итак, со стартом выяснили: 1й коммит 2 декабря 2012 года.
Стек технологий Исходя из success story Magento, выбор пал на PHP. Можно долго спорить о преимуществах и недостатках этого языка, но один факт, который трудно оспорить — его популярность. Вот полный список используемых технологий: PHP 5.4.9 + Composer Symfony2 full stack Doctrine2 Twig MySQL + PostgreSQL jQuery BackboneJS + ChaplinJS RequireJS nodeJs (для минификации JS) Ratchet WebSocket Server Bootstrap 2.3 LESS Выбор инструментов производился по основным критериям: наличие и полнота документации, сообщество и развитие, наличие stable и LTS версий.
Список получился довольно пестрый, многих ветеранов php заставляет прийти в тонус. К сожалению, нельзя сказать, что все инструменты в данном списке идеальны. Из основных проблем хотелось бы отметить: не всегда легко расширяемый дизайн doctrine, прожорливость composer (сейчас на update уходит > 1.2 GB памяти), вольности BackboneJS (в последствии чего был добавлен ChaplinJS и сделан серьезный research AngularJS).
Разработчики, которые уже имеют дело с Symfony2, встретят здесь популярные бандлы (модули), которыми им не раз приходилось пользоваться.
Под спойлером некоторые из них KnpMenuBundle KnpGaufretteBundle FOSRestBundle FOSJsRoutingBundle LiipImagineBundle GenemuFormBundle NelmioApiDocBundle BeSimpleSoapBundle JMSSerializer JMSJobQueue … Community На данный момент сообщество вокруг самой платформы не велико, но мне кажется, что со временем этот недостаток нивелируется. Экосистема, которая построена вокруг Symfony фреймворка, является эталоном для open source продукта и интерес, а иногда и вклад таких членов сообщества как Lukas Smith (из LiiP), членов сообщества другого продукта, основанного на symfony — Sylius, наталкивает на мысль о движении в правильном направлении.Хотелось отметить, что приложение написано с возможностью беспроблемной локализации, интегрирован crowd translation service, поэтому география развития сообщества не ограничена. Насколько мне известно, перевод на русский язык сейчас в процессе. Вклад в разработку платформы можно вносить как путем разработки так и путем развития документации.
Достижения Итак, самое время огласить успехи: несомненным успехом является то, что стартап дошел до GA release. На данный момент мне известно о 3х приложениях, которые используют платформу это: Product Information Management — от Akeneo из Франции, текущая версия 1.2.9DiamanteDesk (Help desk software) — от Eltrino из Украины, сейчас на стадии early beta (судя по их роадмапу)Stock management system от компании Interactive4, деталей к сожалению не знаюОсобое внимание хотелось бы уделить Akeneo, так как ребята уже получили инвестиции в размере 2.3 млн $ на развитие своего продукта. Так же компания SensioLabs (компания основатель Symfony) рассматривала платформу как базу для своего внутреннего продукта, но, к сожалению, решение об использовании/не использовании мне не известно.
Для контроля качества используются системы CI, в том числе travisCI, код платформы покрыт unit тестами (около 70%). Стоит отметить, что существуют так же билды по контролю совместимости с код стандартами (используется PSR-2), а также статические анализаторы кода, такие как PHPMD, Scrutinizer, SensioLabsInsight.
На данный момент платформа насчитывает 54 бандла и 2 компонента.
Описание некоторых из них под спойлом UserBundle — авторизации пользователя, менеджмент пользователей системы, пользовательских групп DashboardBundle — менеджмент пользовательских dashboard, предоставляет абстракию для написания собственных виджетов DataGridBundle — визуализация данных в виде сетки, возможность производить действия с каждой записью либо с несколькими записями, экспорт отображаемых данных FilterBundle — предоставляет набор фильтров которые можно использовать в системе, предоставляет интерфейс для написания собственных фильтров ImportExportBundle — предоставляет абстракцию для написания импорт/експорт функционала, имеет набор основных reader/writer из коробки RequireJSBundle — интегрирует RequireJS в симфони приложение, предоставляет возможности конфигурации данного загрузчика ThemeBundle — предоставляет поддержку тем для декорирования внешнего вида приложения TrackingBundle — предоставляет функционал отслеживания поведения пользователя на сайте, основан на JS части Piwik TagBundle — предоставляет возможность добавления тегирования для любой doctrine сущности ConfigBundle — предоставляет функционал деревьев конфигураций, а так же уже поставляется с готовым деревом system configuration ChartBundle — предоставляет абстракцию для визуализации данных в виде графика, интеграция с Flotr2 FormBundle — содержит набор полезных форм компонентов MigrationBundle — предоставляет механизм миграции схемы и данных CronBundle — обертка над JMSJobQueue добавляющая возможность запуска периодичных задач по расписанию DataAuditBundle — логирование изменений данных, версионирование данных LocaleBundle — локализация приложения, содержит набор форматеров для использования как на PHP так и на JS части SearchBundle — абстракция для написания поисковых механизмов, содержит движок для MySQL и PostgreSQL ReportBundle — визуальный редактор отчетов …. и т.д. подробнее в последующих статьях Disclaimer В заключение надо сказать, что данное решение не претендует на решение всех проблем, наоборот, по моему мнению, применение данного продукта ограничено узкой нишей бизнес приложений.Хотелось бы повториться, что данная статья носит обзорный характер, в связи с этим технические детали в ней отсутствуют. Автор является одним из core разработчиков данного продукта. Эта статья была написана автором из личных побуждений и не несет рекламного характера.
Сообщения о неточностях или ошибках в тексте приветствуются в личные сообщения.
Ссылка на github.
Спасибо за внимание!