Introducing Oro Platform
Hi Habr!
The other day, the release of the young open source platform Oro Platform (BAP). Unfortunately, this event was not highlighted in the Russian-speaking part of the Internet, so I would like to fill out this omission with your permission.
This article is of an overview nature, as it is an introduction to the series of publications on the platform. Who cares what it is - welcome to cat.
BAP ( Business Application Platform) Is a formidable name, a platform for developing business applications. I think that each of us was faced with the fact that during the implementation of a particular task, you notice its similarity to the existing functionality of the service / program that you have ever used. So I would like to take this piece of the application to myself, file a bit and voila! For this purpose, it was decided to create a platform, using which you can maximize your focus on developing a business application domain, and put routine tasks on its shoulders.
To begin with, I would like to say a few words about who is at the origins of the development of this product, its birth date, motivation, prospects and successes already achieved.
History tour
The birth of Oro Platform is directly related to the start of development of the first product that is written on it - OroCRM . In December 2012, Dima Soroka, Yoav Kutner and Jary Carter, who are known to many in the world of e-commerce for their work at Magento Corporation , including Yoav as one of the co-founders, decided to implement a new CRM system project for business based on ecommerce. I think that CRM itself is a topic for a separate post, so for now, let's forget about it.
With the start of a new project, a number of standard tasks appeared that needed to be solved: REST + SOAP API, data grids + filtering, search, import / export, system settings, data migrations, task scheduler (cron tasks), etc. Unfortunately, the world of PHP is not particularly rich in complex CMF solutions that have at least a part of the mentioned functionality. Personally, I am confused by stores and CRM on Word Press , I recall CRM based on Redmine and even a fork of Magento , with which the functionality related to catalog / sales was cut. It was at this stage that a lack of a quality solution in this area was noticed. So, with the start we found out: 1st commit on December 2, 2012.
Technology stack
Based on the success story of Magento, the choice fell on PHP. You can argue for a long time about the advantages and disadvantages of this language, but one fact that is difficult to dispute is its popularity. Here is the complete list of technologies used:
- PHP 5.4.9 +
- Composer
- Symfony2 full stack
- Doctrine2
- Twig
- MySQL + PostgreSQL
- jQuery
- BackboneJS + ChaplinJS
- RequireJS
- nodeJs (for JS minification)
- Ratchet WebSocket Server
- Bootstrap 2.3
- LESS
The choice of tools was carried out according to the main criteria: the availability and completeness of the documentation, community and development, the availability of stable and LTS versions.
The list turned out to be quite variegated; many vectors of php make them tone up. Unfortunately, we cannot say that all the tools on this list are perfect. Of the main problems, I would like to note: the doctrine design is not always easily extensible, composer voracity (now it takes> 1.2 GB of memory to update), BackboneJS liberties (after which ChaplinJS was added and serious research AngularJS was done ).
Developers who are already dealing with Symfony2, they will meet here popular bundles (modules), which they had to use more than once.
Under the spoiler, some of them
- KnpMenuBundle
- KnpGaufretteBundle
- FOSRestBundle
- FOSJsRoutingBundle
- LiipImagineBundle
- GenemuFormBundle
- NelmioApiDocBundle
- BeSimpleSoapBundle
- JMSSerializer
- JMSJobQueue
- ...
Community
At the moment, the community around the platform itself is not large, but it seems to me that over time this drawback is leveled. The ecosystem that is built around the Symfony framework is the benchmark for an open source product and the interest, and sometimes the contribution of community members like Lukas Smith (from LiiP ), members of the community of another symfony-based product - Sylius , suggests the idea of moving in the right direction.
I would like to note that the application is written with the possibility of trouble-free localization, the crowd translation service is integratedTherefore, the geography of community development is not limited. As far as I know, translation into Russian is now in process. Contribution to the development of the platform can be made both by development and by developing documentation.
Achievements
So, it's time to announce the success: the undoubted success is that the startup has reached the GA release. At the moment I know about 3 applications that use the platform:
Product Information Management - from Akeneo from France, current version 1.2.9
DiamanteDesk ( Help desk software ) - from Eltrino from Ukraine, now at the early beta stage (judging by their roadmap )
Stock management system from Interactive4 , unfortunately I do not know the details
I would like to pay special attention to Akeneo, since the guys have already received investments in the amount of $ 2.3 million for the development of their product. SensioLabs (the founder of Symfony) also considered the platform as the basis for its internal product, but, unfortunately, I do not know the decision to use / not use.
For quality control, CI systems are used , including travisCI, the platform code is covered by unit tests (about 70%). It is worth noting that there are also builds for monitoring compatibility with code standards (using PSR-2 ), as well as static code analyzers, such as PHPMD , Scrutinizer , SensioLabsInsight .
At the moment, the platform has 54 bundles and 2 components.
Description of some of them under spoil
- UserBundle - user authorization, system user management, user groups
- DashboardBundle - custom dashboard management, provides an abstraction for writing custom widgets
- DataGridBundle - data visualization in the form of a grid, the ability to perform actions with each record or with several records, export displayed data
- FilterBundle - provides a set of filters that can be used in the system, provides an interface for writing your own filters
- ImportExportBundle - provides an abstraction for writing import / export functionality, has a set of basic reader / writer out of the box
- RequireJSBundle - integrates RequireJS into a symphony application, provides configuration options for this bootloader
- ThemeBundle - provides support for themes to decorate the appearance of the application
- TrackingBundle - provides functionality for tracking user behavior on the site, based on the JS part of Piwik
- TagBundle - provides the ability to add tagging for any doctrine entity
- ConfigBundle - provides the functionality of configuration trees, and also comes with a ready-made system configuration tree
- ChartBundle - provides an abstraction for visualizing data in a graph, integration with Flotr2
- FormBundle - contains a set of useful forms of components
- MigrationBundle - provides a mechanism for migrating schema and data
- CronBundle - a wrapper over JMSJobQueue adding the ability to run periodic tasks on a schedule
- DataAuditBundle - logging data changes, versioning data
- LocaleBundle - application localization, contains a set of formatters for use in both PHP and JS parts
- SearchBundle - an abstraction for writing search engines, contains an engine for MySQL and PostgreSQL
- ReportBundle - visual report editor
- ... etc. more in subsequent articles
Disclaimer
In conclusion, I must say that this solution does not pretend to solve all problems, on the contrary, in my opinion, the use of this product is limited to a narrow niche of business applications.
I would like to repeat that this article is of an overview nature, in connection with this there are no technical details in it. The author is one of the core developers of this product. This article was written by the author for personal reasons and is not advertising in nature.
Messages about inaccuracies or errors in the text are welcomed in private messages.
Link to github .
Thanks for attention!