As we are getting closer to making our code available for OroCRM and the OroPlatform projects, we wanted give an overview of the technology choices we made. We started from scratch with the Platform, which allowed us the freedom to choose what the best-suited technologies to match our product requirements. We spent a lot of time thinking, learning and testing different options before making our choices and ended with best in class technologies that will both serve our needs and allow developers and our ecosystem to have a powerful, extensible and flexible platform and application. We also took great care selecting technologies that use licenses that do not put users or community developers at risk and made sure these licenses are compatible with each other.
With hundred of millions of websites built using PHP and the largest community of web developers; PHP was the choice for our server side scripting language. PHP is proven and can be used to build large and scalable web applications. And let’s be honest, we are PHP developers ourselves. The PHP minimum version required will be 5.3.2 but we might change that and make 5.4.x our minimum required version as the EOL of 5.3 was announced earlier this year.
After trying and testing different MVC PHP frameworks we decided on Symfony2 and are very happy with our choice. We love how robust it is and the great vibrant community around it. Almost every time we work on a feature it seems our developers say “there is a community bundle for that” which allows us to rapidly develop our solution. Symfony has great documentation and tutorials for people who want to get started with it so please visit their site and get to know it. If Symfony2 is not the framework of choice for you, don’t worry, Symfony allows to easily use 3rd party libraries so you can use components from your favorite framework.
Although PHP is a template engine on it’s own and may be used as one, it seems that part of it has not evolved over the years and some benefits of modern template engines are missing. As such, we have selected Twig as our template engine of choice. Twig is integrated and supported by Symfony2 out of the box and is secure, fast and flexible. It also comes with a lot of documentation and tutorials on how to get started.
For now our development effort is around supporting MySQL, the most popular open-source database engine, but we are working on supporting other open-source RDBMS’s such as PostgreSQL and in the future might add support for non open-source databases such as MSSQL and Oracle. We will also have some functionality that will use Key-Value access to the storage implemented using simple tables and release adapters for the most popular NoSQL databases.
For our Database Abstraction Layer (DBAL) and Object Relational Mapper (ORM) we are working with Doctrine 2, which is seamlessly integrated with Symfony2 and allows developers to easily integrate with other RDBMS engines, as their projects require.
Testing our Application
To ensure the quality of our application and platform throughout our development cycle and different versions, we are covering our code with Unit Tests using the PHPUnit testing framework. We have set the bar to have at least 70% of our code covered with unit-tests. We also have a team of QA engineers working on adding functional test coverage and load-tests of our application and platform. All of our test-suit will be made available with our code.
We will make our code public on GitHub by the end of May and we are looking forward to interacting and getting feedback from developers and companies that want to collaborate around the OroCRM and/or the OroPlatform projects.