Пользователь
0,0
рейтинг
20 октября 2014 в 02:25

Разработка → Знакомство с 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.9
DiamanteDesk (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.

Спасибо за внимание!
Александр Смага @to0n1
карма
9,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

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

  • +2
    Подключать node.js только ради минификации js? Как будто на php их нет. Выходит лишняя зависимость.
    • 0
      Я думаю сделано для девелопмент мода, в продакшене все уже минимизировано и сжато
    • 0
      Вы requirejs модули не пожмете с помощью php. Там все равно компилятор на nodejs ставить нужно
    • +1
      node.js — опциональная зависимость, без него все будет работать, модули будут грузиться on demand асинхронно.

      У нас был выбор между портом r.js на java и собственно запускать r.js из родного node окружения. Мы приняли решение так как нам показалось, что сам r.js работает оптимальнее на node и шансов, что на сервере будет стоять node.js больше чем шансов найти там java
    • 0
      Насколько я знаю, nodejs в OroCRm используется для веб-сокетов.
      • 0
        Нет, для вебсокет сообщений используется решение на PHP (упомянутый выше Ratchet WebSocket Server)
        • 0
          Ошибся, спасибо!
  • 0
    Может как-то скриншотами (тестового приложения или текущих вариантов использования) разбавить?
    • 0
      Crm о которой говорит автор, можно рассматривать как пример www.orocrm.com

      пс: там кстати можно найти демо =)
  • –2
    Похоже на что — то между недоделанной CMS и интернет магазином…
    • 0
      Это скорее платформа для приложения (CMS, Магазин, и тд), думаю правильное название: CMF.
      • +2
        Правильное название — Business Application Platform (BAP). Хорошим примером будет платформа 1С: Предприятие.
  • 0
    Около двух месяцев используем OroCRM для своих нужд.
    Полет отличный. Процесс установки (со скриншотами) можно посмотреть вот тут allframeworks.ru/post/ustanovka-orocrm.html

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