Это демо приложение для обеспечения записи клиента к врачу посредством веб-сайта. Приложение построено на базе фреймворка Yii2
Ссылка на ДЕМО приложения: http://66.225.220.70:8081/
- git
- composer
- php
- Клонируем репозиторий: git clone https://github.com/sergshner/doctors_appointments.git .
- Ставим composer-asset-plugin: composer global require "fxp/composer-asset-plugin:^1.2.0"
- Ставим зависимости: composer install
- Редактируем config/db.php, заполняем dsn,username,password
- Применяем миграции: yii migrate/up
Отражены на следующей ER диаграмме
Для изменения и поддержания структуры базы данных а актуальном состоянии в проекте используется механизм миграций, в частности, его реализация, встроенная в Yii2 фреймворк. (см. папку migrations)
Фреймворк Yii2 построен на основе паттерна MVC. Реализация моделей находится в папке models.
В основе интерфейса пользователя лежит несложный responsive шаблон на основе фреймворка Twitter Bootstrap. Таким образом, отображение сайта на устройствах с различными размерами экрана не нарушает User Expierence, сайт выглядит красиво и им удобно пользоваться.
Для реализации интерфейса записи к врачу использована технология AJAX, а точнее, её реализация, PJAX, которая также интегрирована в Yii2 фреймворк. Использование AJAX позволяет избавиться от необходимости полной перезагрузки страницы при каждом переходе пользователя, что значительно повышает отзывчивость сайта, уменьшает трафик между клиентом и сервером, снижает нагрузку на сервер. Сохранение данных о записях к врачу также реализовано при помощи технологии AJAX.
Благодаря фреймворку Yii2 мы имеем "из коробки" защиту от самых распространнёных уязвимостей в вебе:
- SQL-инъекция - работа с данными происходит через модели, нет "чистых" SQL запросов. Если же они понадобятся, необходиомо использовать "подготовленные выражения"
- XSS (кросс сайтовый скриптинг) - пользовательские данные при выводе в браузер легко экранируются при помощи функций \yii\helpers\HtmlPurifier::process или \yii\helpers\Html::encode
- CSRF (межсайтовая подделка запроса) - в Yii2 уже интегрирована защита на основе токена
На данным этапе развития проекта специфические шаблоны и решения для масштабирование не использовались. Однако, они могут быть легко добавлены по мере необходимости. Такими решениями могут быть:
- Добавление кеширования (различные уровни - только данные, вся страница, часть страниц(ы)) - кеширование должно быть проработано с точни зрения понимания, какие части страницы и сколько могут находится в кешированном (т.е., возможно, устаревшем) состоянии
- Горизонтальное масштабирование (уровень веб-сервера/приложения, уровень БД) - обычно самая сложная и неоднозначная часть для масштабирования это слой БД. Применение того же шардинга, часто требует пересмотра шаблонов работы с даннными и денормализации. В данном проекте видится, что на начальном этапе может быть легко применён шардинг на основе ID доктора.