ООО "КУРЬЕР-1"
300 000
Питание
Россия, Москва
Интернет-магазин
Апрель 2022
Клиент: Доставка здоровой еды.
Разработать интернет магазин, с онлайн оплатой товара.
Отдельно должен быть блог, а также рецепты здоровой пищи.
Проект разделен на несколько этапов:
- Полное Брендирование
- Подготовка макетов и дизайн
- Верстка проекта
- Программирование функционала
- Тестирование проекта
Были разработаны логотипы компании, пакеты для доставки, картонные коробки, сувенирная продукция.
Дизайнером было предоставлено две версии сайта. (Мобильная и десктопная)
Все изображения носят уникальный характер, некоторые изображения отрисовывались вручную
Макеты сделаны в онлайн-сервисе для разработки интерфейсов и прототипирования с возможностью организации совместной работы в режиме реального времени.
Данный проект состоит из 19 страниц, которые включают в себя как простые, так и сложные, интерактивные блоки (в примере приведены только основные страницы онлайн-ресторана). В проекте присутствуют разного рода слайдеры, всплывающие окна, анимации и др. интерактивные элементы, выполненные исключительно на CSS3 и нативном java-script.
Вёрстка же проекта осуществлена на препроцессоре SASS с использованием переменных, циклов, миксинов, техники вложенности и наследования.
В проекте присутствует функционал по работе с геопозицией. Для реализации данного функционала было выбранно "API Яндекс Карт", т.к. он безукоризненно работает и гибко настраивается. При разработке для удобства использовался таск-менеджер gulp.
Вся вышеописанная работа заняла 20 рабочих дней.
Данное приложение объединяет в себе функционал нескольких сервисов: блог и онлайн-ресторан. Кроме того, приложение совмещает в себе функции службы управления содержимым (CMS) для максимальной универсальности и настраиваемости без необходимости вмешательства со стороны программиста.
С целью облегчения интеграции со сторонними сервисами, а также с целью унификации функционала приложения на Android, через Web и пр. при разработке была реализована REST-архитектура. REST-архитектура основана на концепции MVC («модель-представление-контроллер»), которая является общепринятой в веб-разработке.
Общая концепция приложения подразумевает упрощённое взаимодействие с CRUD-методами («создание, чтение, обновление, удаление»), посредством которых обеспечивается функционирование приложения (что подразумевает взаимодействие с базой данных, а также управление записями). Ввиду разветвлённости базы данных используется система взаимоотношений между отдельными моделями данных, которые позволяют подгружать по мере необходимости дополнительные записи, необходимые в контексте выполняемой операции. Этот подход был избран в том числе и с целью экономии производительности и памяти, поскольку позволял реализовать динамический расход памяти, дополнительно загружая только необходимые связанные модели памяти. Это позволило максимально оптимизировать трафик между сервером и клиентским приложением: за счёт малого объёма информации, пересылаемой на сервер и обратно, достигнута оптимальная скорость работы клиентских приложений, которые максимально независимы от сервера и работают только на данных, закодированных в JSON-строку, которую присылает сервер.
Организация базы данных
Ввиду разнообразного, не пересекающегося друг с другом функционала, используется максимально разветвлённая структура базы данных: в ней учитываются данные клиента, меню ресторана, содержимое корзины, зоны доставки, данные заказа, данные блога, комментарии к постам, количество лайков и количество просмотров.
Во избежание нарушения целостности информации и наложения данных друг на друга, база данных разделена на блог, ресторан и систему управления содержимым.
Данные заказа и содержимого корзины связаны с данными меню посредством реляционной модели. Благодаря этому значительно уменьшается объём хранящихся данных: в связанных моделях данных хранятся только идентификаторы оригинальных записей. Это служит нескольким целям: во-первых, данные подгружаются динамически, что избавляет от необходимости вносить изменения в данные в нескольких местах; во-вторых, это позволяет привязывать к одной модели неограниченное число других моделей, что позволяет учитывать максимально разнообразную информацию, делает её тонко настраиваемой и, наконец, позволяет хранить всю необходимую информацию по заказу в таком виде, чтобы конечному пользователю было удобно оформлять заказы.
Блог и система управления содержимым
Реляционная модель базы данных используется также в блоге, чтобы облегчить управление постами, пользователями, количеством лайков и комментариями к постам. Администратор может самостоятельно добавлять посты в блог, либо наделить соответствующими полномочиями других пользователей. Система взаимосвязи между моделями базы данных позволяет без дублирования кода за один запрос загрузить все связанные данные: например, пост, его автора, лайки к нему и оставленные комментарии.
Система управления содержимым предназначена для добавления на сайт новых страниц без необходимости вмешательства со стороны программиста. Во избежание возможных ошибок используется единый шаблон, содержимое которого программным путём автоматически освобождается от возможных вредоносных инструкций или тэгов, которые могут нарушить целостность данных и предоставить доступ к функционалу, который должен быть заблокирован для пользователя, не имеющего соответствующих полномочий.
Контроллеры
Контроллеры используются для отдачи команд и выполнения нужных функций. Чтобы обеспечить универсальность приложения, контроллеры разделены на два типа: на API-функции и на контроллера клиентского приложения. API-функции определены отдельно для интеграции с будущими и текущими клиентскими приложениями.
Для дальнейшего развития приложения API-контроллеры разбиты по версиям. Это позволит в будущем безболезненно, не отключая устаревший функционал, вводить новые API-функции и проводить их тестирование, не нарушая при этом работу основного приложения.
to be continued ............
Ввиду обширной и не пересекающейся между собой функциональности приложения «Здоровая кухня», было решено использовать шины отдачи команд. Такая концепция подразумевает оборачивание операций в отдельные файлы по их назначению. Таким образом избегается перегруженность классов и инкапсулированность команд исключает возможность возникновения каскадных ошибок внутри класса, когда при изменении одной функции могут отказать все остальные.
Шина отдачи команд подразумевает, что команда делится на два класса: непосредственно класс команды и класс обработчика. Класс команды принимает входные данные и преобразует их соответственно внутренним потребностям. Обработчик команды с помощью сервис-контейнера загружает зависимости и репозиторные классы, после чего выполняет необходимые действия с данными команды.
Такой подход позволяет создавать неограниченное число команд и неоднократно использовать уже существующие, не допуская при этом перегруженности класса контроллера.
Тестирование проводилось вручную. Был затронут основной функционал сайта:
- Добавление категорий и продуктов
- Размещение акций и предложений
- Система заказа и доставки
и т.д.
На разработку проекта было затрачено около двух месяцев работы. Трудились над ним два программиста, один верстальщик, и два дизайнера. Проект сдан точно в срок по договору.
P.S. По договору мы не имеем право показывать реальный сайт клиента, по ссылке доступно демо.
ООО Л-Корпорация с удовольствием обсудит вашу задачу