Symfony: для каких задач используем и почему выбрали для системы учета

Symfony: для каких задач используем и почему выбрали для системы учета

Коротко

  • 01
    Что за инструмент

    Symfony — фреймворк PHP

  • 02
    Где используем

    Серверная часть системы учета для цветочного бизнеса Posiflora

  • 03
    Почему выбрали Symphony

    Создает новые компоненты быстро и не утяжеляет систему

    Помогает использовать один и тот же код и допускать меньше ошибок

    Организовывает среду вокруг кодовой базы, с которой удобно работать

  • 04
    Результаты

    9 месяцев заняла разработка

    1,2 тыс. пользователей на июнь 2021

    Cовместимо со всеми популярными онлайн-кассами

Приложение Posiflora оформляет заказы, принимает оплату и сохраняет данные о клиентах

Posiflora — система учета складских остатков и развития продаж для цветочного бизнеса. Ее используют интернет‑магазины с доставкой, супермаркеты и маленькие магазины. На июнь 2021 года Posiflora пользуются 1200 клиентов. OrbitSoft разработал решение с нуля.

С помощью приложения менеджеры цветочного бизнеса могут:

  • вносить телефон, имя и адрес клиента, оформлять заказы;
  • принимать оплату наличным и безналичным платежом;
  • распечатывать кассовые чеки;
  • сохранять информацию о заказах в базе данных;
  • следить за остатками на складе;
  • списывать цветы, если они испорчены или завяли;
  • распределять смены между сотрудниками;
  • анализировать активность клиентов;

Чтобы бизнесу было удобно работать с Posiflora, система работает на любых устройствах: компьютером пользуются руководители, планшетом — менеджеры на точках, телефоном — флористы для оформления заказа и курьеры для доставки.

Что дает использование Symfony

В разработке мы решили применить популярный фреймворк Symfony — рассказываем, какие плюсы он дает для работы сервиса.

Создает новые компоненты быстро и не утяжеляет систему. Разработчику не нужно писать много кода, чтобы подключить новые функции к системе. Symfony не копирует сам себя при создании новых компонентов, а остается единым фреймворком благодаря минимально функциональному ядру.

Пример установки и настройки дополнительного компонента для приложения
После установки зависимости команды следующей секции файла composer. json будут автоматически выполнены. Например, cache: clear — выполнить очистку файлового кэша приложения

Помогает использовать один и тот же код и допускать меньше ошибок. Многим проектам требуется раз за разом использовать некоторые решения между различными компонентами — например, способы хранения данных для разных платформ.

В Symfony оригинальна система множественного использования кода — The Bundle System. Это готовая библиотека с рецептом интеграции в Dependency Injection контейнер приложения и описанием необходимых параметров конфигурации. Мы часто используем бандлы в работе.

Например, бандл, с помощью которого различные приложения бэкенда взаимодействуют между собой, а также между клиентскими приложениями в JSON-формате с предопределенными схемами сущностей.

Пример бандла в приложении

Организовывает среду вокруг кодовой базы, с которой удобно работать. Чтобы программисту было удобно работать, фреймворк создает специальную среду, где сохраняет файлы с паролями, адресами в файлах разных форматов.

Symfony поддерживает любые форматы файлов: как нативные PHP-файлы, так и XML, INI, YAML. В Posiflora мы используем формат YAML: он легко читается и органично описывает необходимые структуры параметров. Фреймворк по умолчанию производит кеширование результатов парсинга файла конфигурации YAML, из-за этого работа фреймворка не влияет на производительность приложения.

Пример файла конфигурации в формате YAML

Результаты работы с Symfony: запустили приложение за 9 месяцев


Приложение сразу работало на разных устройствах. Posiflora поддерживает все версии iPad, версии iPhone, начиная с шестой, и более 10 тысяч моделей Android-устройств.

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

При необходимости Qt позволит быстро разработать приложение для новой платформы.

Все данные о заказах сохраняются, даже если флористы заносили их оффлайн. Взаимодействие с back-end происходит по сети с использованием протокола JSON API. В серверной части приложения на Symfony принимают и обслуживают запросы от клиентов, синхронно взаимодействуют между собой по протоколу JSON API или же асинхронно — через очереди сообщений RabbitMQ.

Приложение работает быстро. При нажатии на любую кнопку в нем обновляется только часть страницы, в не перезагружается вся страница как на обычных сайтах. Это возможно благодаря тому, что клиент-серверная парадигма позволяет разграничивать серверную часть и интерфейсную.

Приложение адаптируется под нужды заказчика. Если у клиента появляется новая задача для системы, мы стараемся ее решить. Например, мы внедрили ранжирование поставок по европейским маркировкам, добавили поддержку штрихкодов, возможность подключать информацию из разных рекламных кабинетов. Всего за два года работы в бэклоге скопилось более 2 тысяч решенных задач. Мы решили их с помощью Qt или благодаря возможности внедрять нативный код.

Приложение не виснет даже в праздники, когда запросы возрастают. Каждый модуль упакован в контейнер на сервере и может быть горизонтально масштабирован в зависимости от нагрузки.

Тратим разумные деньги на обслуживание. Фреймворк экономит ресурсы компании на разработку: для написания обновлений и обслуживания приложения нам хватает двух программистов. Платить за использование фреймворка и техподдержку не нужно.

1,2 тыс. 350 40 тыс.
пользователейзапросов обрабатывает система каждую секундупродаж в сутки

Технический блок

Фреймворки:

  • Back-End: Symfony
  • Web Front-End: Angular
  • Mobile/Desktop App: Qt

Языки программирования:

  • Back-End: PHP 7.3—7.4
  • Web Front-End: TypeScript
  • Mobile/Desktop App: C++

Библиотеки:

  • neomerx\json-api
  • Doctrine ORM
  • Enqueue
  • League\Flysystem
  • Monolog
  • Swift Maile
  • Twig

Базы данных:

  • MySQL
  • Redis
  • Apache Kafka
  • RabbitMQ
  • Couchbase
  • SQLite
  • ElasticSearch

Платформы и стороннее ПО:

  • Docker, Docker Compose, Docker Swarm
  • HashiCorp Consul
  • HashiCorp Vault
  • Kafka Connect
  • Graylog
  • Grafana, Graphite, StatsD

В чем бы вы ни нуждались, мы можем помочь!

Расскажите нам, с какими проблемами вы сталкиваетесь в своем бизнесе. Мы с нетерпением ждем вашего ответа.

Получите ответ по смс

Ваше сообщение успешно отправлено!
Представьтесь пожалуйста
Укажите номер, на который придет ответ
Нажимая на кнопку, вы даете согласие
на обработку персональных данных.