{% extends 'Layouts/Doc/default.html.twig' %}
{% block title %}{{ 'app.documentation.menu.architecture.drivers'|trans }}{% endblock %}
{% block headerPageTitle %}{{ 'app.documentation.menu.architecture.drivers'|trans|upper }}{% endblock %}
{% block body %}
<div class="card mb-12">
<div class="card-body flex-column p-5">
<div class="d-flex align-items-center h-lg-100px p-5 p-lg-15">
<div class="row">
<div class="col-md-12 pt-5 scroll-y">
<div class="position-relative w-100 text-gray-800">
<p><strong>Architectural Drivers</strong> are the key factors that influence all the decisions we take during the application development. Historically, a lot of them were taken unconsciously, but, happily, resulted in good decisions that we can undoubtedly justify today. All of them have a significant influence on the <strong>Popina Order</strong> version <strong>{{ foxorders_version }}</strong> as an application - they can and should be used to guide us during the development, to take the best decision for the product.</p>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center p-lg-15">
<div class="row">
<div class="col-md-12 pt-5 scroll-y">
<h1 class="fw-bold fs-4 fs-lg-1 text-gray-800 mb-3">Technical constraints</h1>
<h2 class="fs-3 mt-10">Programming language</h2>
<h2 class="fs-3 mt-10">PHP</h2>
<div class="position-relative w-100 text-gray-800">
<p>Due to the decision to base <strong>Popina Order</strong> on the <strong>Symfony framework</strong> (see below), PHP was the only possible option as a programming language. Nevertheless, /strong>a good decision!</strong> This language is dynamically developing for the last few years and still <strong>power up most</strong> of the websites and application in <strong>the world wide web</strong>.</p>
</div>
<h2 class="fs-3 mt-10">React JS</h2>
<div class="position-relative w-100 text-gray-800">
<p><strong>React</strong> lets you build rich <strong>user-interfaces</strong> easily. <strong>Quality</strong> of user-interfaces is important because a poorly designed <strong>user-interface</strong> is generally less user-friendly and the users will not like a poorly <strong>designed UI</strong>.</p>
<p>If your web app has <strong>cool</strong>, <strong>high-quality UIs</strong>, your <strong><u>users will love to use your app</u></strong>. So building high-quality user-interfaces is crucial to business success.</p>
<p>Yes, you can build cool interfaces with other technologies too, but <strong>React</strong> lets you do it <strong>easily</strong> using the <strong>declarative components</strong>.</p>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center p-lg-15">
<div class="row">
<div class="col-md-12 pt-5 scroll-y">
<h1 class="fw-bold fs-4 fs-lg-1 text-gray-800 mb-3">Main frameworks and libraries</h1>
<h2 class="fs-3 mt-10">Backend Symfony</h2>
<img alt="Symfony" class="mt-10" src="{{ foxorders_doc_libraries ~ 'symfony.webp' }}" style="width: 101.7px; height: 101.7px; margin: auto;display: block;"/>
<p><strong>Popina Order</strong> is based on <strong>Symfony</strong>, which is a <strong>leading PHP framework</strong> to create web applications. Using Symfony allows developers to work better and faster by providing them with certainty of developing an application that is fully compatible with the business rules, that is <strong>structured, maintainable and upgradable</strong>. Also it allows to <strong>save time</strong> by providing <strong>generic re-usable modules</strong>.</p>
<div class="position-relative w-100 text-gray-800 mt-10">
<p><a href="https://symfony.com/what-is-symfony" target="_blank">Learn more about Symfony.</a></p>
</div>
<h2 class="fs-3 mt-10">Doctrine</h2>
<img alt="Doctrine" class="mt-10" src="{{ foxorders_doc_libraries ~ 'doctrine.webp' }}" style="margin: auto;display: block;"/>
<p><strong>Popina Order</strong>, by default, uses the <strong>Doctrine ORM</strong> for managing all entities. Doctrine is a family of PHP libraries focused on providing data <strong>persistence layer</strong>. The most important are <strong>the object-relational mapper (ORM)</strong> and <strong>the database abstraction layer (DBAL)</strong>. One of Doctrine’s key features is the possibility to write database queries in <strong>Doctrine Query Language (DQL)</strong> - an object-oriented dialect of SQL.</p>
<div class="position-relative w-100 text-gray-800 mt-10">
<p>For deeper understanding of how Doctrine works, please refer to the <a href="https://doctrine-orm.readthedocs.io/en/latest/" target="_blank">excellent documentation on their official website</a>.</p>
</div>
<h2 class="fs-3 mt-10">Twig</h2>
<img alt="Twig" class="mt-10" src="{{ foxorders_doc_libraries ~ 'twig.webp' }}" style="width: 158.7px; height: 113.7px; margin: auto;display: block;"/>
<p><strong>Twig</strong>, use in the backoffice (admin, manager and shop ownner) is a modern template engine for PHP that is really fast, secure and flexible. Twig is being used by Symfony.</p>
<div class="position-relative w-100 text-gray-800 mt-10">
<p>To read more about Twig, <a href="https://twig.symfony.com/doc/" target="_blank">go here</a>.</p>
</div>
<h2 class="fs-3 mt-10">API Platform</h2>
<img alt="API Platform<" class="mt-10" src="{{ foxorders_doc_libraries ~ 'api_platform.webp' }}" style="width: 150.0px; height: 150.0px; margin: auto;display: block;"/>
<p><strong>API Platform</strong>, is a modern solution for developing high quality APIs. API Platform works by default with Symfony and depends on its components.</p>
<div class="position-relative w-100 text-gray-800 mt-10">
<p>To read more about API Platform, <a href="https://api-platform.com/docs/" target="_blank">go here</a>.</p>
</div>
<h2 class="fs-3 mt-10">Expo</h2>
<img alt="Expo" class="mt-10" src="{{ foxorders_doc_libraries ~ 'expo.png' }}" style="width: 158.7px; height: 113.7px; margin: auto;display: block;"/>
<p><strong>Popina Order</strong> uses <strong>Expo, a framework and a platform for universal React applications</strong>. It supplies a set of tools and services that <strong>simplify the development and testing</strong> of <strong>ReactJs apps</strong>, offering/giving the possibility to run the code on your <strong>phone easily</strong>. Besides that, Expo provides a more <strong>robust</strong> and <strong>developer-friendly workflow</strong>.</p>
<div class="position-relative w-100 text-gray-800 mt-10">
<p><a href="https://docs.expo.dev/overview/" target="_blank">Learn more about Expo</a>.</p>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center p-lg-15">
<div class="row">
<div class="col-md-12 pt-5 scroll-y">
<h1 class="fw-bold fs-4 fs-lg-1 text-gray-800 mb-10">Sources and inspirations</h1>
<p>This chapter was created inspired by the following sources:</p>
<ul>
<li><strong><a href="https://medium.com/@janerikfra/architectural-drivers-in-modern-software-architecture-cb7a42527bf2" target="_blank">Architectural Drivers in Modern Software Architecture</a></strong> by Erik Franzen.</li>
<li><strong><a href="https://www.kamilgrzybek.com/blog/posts/modular-monolith-architectural-drivers" target="_blank">Modular Monolith: Architectural Drivers</a></strong> by Kamil Grzybek.</li>
<li>[PL] <strong><a href="https://droganowoczesnegoarchitekta.pl/" target="_blank">Droga Nowoczesnego Architekta</a></strong> - online course for software architects and engineers.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
{% endblock %}