Самыми популярными языками программирования для написания серверной части являются PHP, Java, Ruby, Python и С# [9].

Существует несколько основных систем оценки популярности языка, наиболее используемые TIOBE и PYPL (PopularitY of Programming Languages) [10]. Индекс TIOBE считает упоминания о том или ином языке программирования на различных web-страницах, тогда как индекс PYPL подсчитывает количество запросов в поисковые системы для поиска учебных пособий по языку программирования.

Рейтинг языков программирования за 2017 год по версии GitHub (основанный на индексе PYPL) и TIOBE [11] представлен в Таблице 2:

GitHub

TIOBE

Java

Java

Python

C

PHP

C++

C#

Python

JavaScript

C#

C

Visual

C++

JavaScript

Objective-C

Assembly language

R

PHP

Таблица 2

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

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

Основными известными web-фреймворками для Java являются:

    Spring Framework [12] - фреймворк, имеющий открытый исходный код, используется с 2002 года, последняя версия 4.3.4, готовится к выходу Spring 5. В его основе используется шаблон проектирования “Инверсия управления” (Inversion of Control, IoC). GWT (Google web Toolkit) [13] - особенностью GWT является преобразование Java кода в JavaScript, текущая версия 2.8.0, разрабатывается с 2006 года. Apache Struts [14] - в основе фреймворка лежит шаблон MVC, последняя версия 2.5

Несколько лет подряд наиболее популярным фреймворком остаётся Spring [15]. Проект HotFrameworks предоставляет рейтинг фреймворков для различных языков программирования с ноября 2014 года, в котором Spring занимает первое место среди java-фреймворков и входит в десятку лучших среди всех web-фреймворков. Статистика собирается при помощи Github, Stack Overflow и других ресурсов.

НЕ нашли? Не то? Что вы ищете?

Рейтинг популярности восьмёрки лучших фреймворков на различных языках программирования представлен на рисунке 5 на нём Spring обозначен фиолетовым цветом, а рейтинг популярности java-фреймворков отображается на рисунке 6, фреймворк Spring на нём отмечен светло-голубой линией.

Рисунок 5

Рисунок 6

Spring был выбран мной в качестве основного каркаса для web-платформы KazanStreetGames. Учитывая сформированные ранее требования к приложению, необходимо использовать следующие компоненты Spring:

    Spring MVC - используется для чёткого разделения между слоями модели, представления и контроллеров, что позволяет добиться хорошей поддерживаемости и лёгкой расширяемости программного продукта, также использование Spring MVC позволяет сократить написание повторяющегося кода. Spring Security - используется для реализации авторизации и аутентификации пользователей и для управления доступом к ресурсам web-приложения. Spring Data JPA - используется для упрощения взаимодействия серверной части web-приложения с базой данных.

       В качестве системы управления базами данных (СУБД) я выбрала MySQL. Этот продукт имеет открытый исходный код, является удобным в использовании, надёжным и бесплатным для программ с также открытым исходным кодом, что немало важно, так как приложение KazanStreetGames должно быть доступно для широкого круга пользователей, имеющих разный социальный статус, а значит затраты на содержание серверов должны быть минимальными.

Клиентская часть web-приложения является важным компонентом информационной системы, так как именно через неё конечный пользователь взаимодействует с системой. Важный фактор успеха web-приложения - это удобный, интерактивный и динамичный пользовательский интерфейс.

       Для представления данных в web-приложении KazanStreetGames используется технология JSP (JavaServer Pages). Данная технология позволяет встраивать динамические компоненты в статическое содержимое web-страницы.

       Исходя из функциональных требований web-приложения KazanStreetGames, в клиентской части была необходимость не только предоставлять данные пользователю, но и проводить динамическую валидацию форм (проверку данных перед отправкой на сервер), сортировку и фильтрацию данных без перезагрузки страницы, осуществлять работу с картами, основанную на запросах пользователя в режиме реального времени.

Для решения этих задач мной был выбран язык JavaScript. Существует большое количество фреймворков на JavaScript, позволяющих добавлять интерактивность и динамичность для сайтов исходя из поставленных перед разработчиком требований. Использование фреймворков ускоряет процесс разработки, уменьшает количество однотипного кода и улучшает качество готового продукта.

В web-приложении KazanStreetGames был использован  JavaScript фреймворк - AngularJS [16]. Данный фреймворк обладает богатым набором функций, в который входят:

    автоматическое обновление вида при изменении данных в модели добавление собственных контроллеров для управления DOM-элементам богатая библиотека готовых директив и методов для валидации форм готовое решение для подключения к yandex map API и другим известным API

Основным сценарием использования KazanStreetGames является выбор и прохождение квестов по городу, что означает, что большинство пользователей будут заходить на сайт с телефона или планшета, а значит очень важно сделать экскурсионно-развлекательную web-платформу адаптивной для различных размеров экранов устройств. Для достижения этой цели мной был подключен CSS-фреймворк Materialize. Он позволяет оформить приложение в стиле материального дизайна, которому придерживаются сейчас разработчики наиболее популярных и успешных проектов, таких как Google или Microsoft.

Web-приложение KazanStreetGames является достаточно большим проектом, который должен проходить этапы компиляции, запуска unit-тестов, упаковки в формат, необходимый для сервера приложений, загрузки на сервер. Также необходима работа по разрешению конфликтов в версиях сторонних библиотек и возможность быстрого добавления новых зависимостей. Все эти задачи были автоматизированы при использовании сборщика проектов Maven.

При разработки была использована система контроля версий Git и многофункциональная среда разработки Intellij Idea от компании JetBrains.

Архитектура web-приложения.

Высокоуровневая архитектура.

В основе web-приложения KazanStreetGames лежит фреймворк Spring MVC, построенный на шаблоне проектирования MVC - Model View Controller.

Серверная часть приложения состоит из следующих элементов:

    model - модуль для представления данных, содержащий классы-сущности, являющиеся отображением таблиц из базы данных. DAO - модуль взаимодействия с базой данных, содержащий методы, которые будут использоваться в приложении для создания CRUD запросов (Create - создание новых строк в таблицах, Read - чтение информации из таблиц, Update - редактирование данных в строках таблиц, Delete - удаление строк из таблиц) service - модуль для описания основной логики приложения и  валидации(проверки) данных exception - модуль для описания возможных внутренних ошибок controller - модуль обработки пользовательских web-запросов view - модуль отображения данных

       Взаимодействие вышеперечисленных модулей представлено на диаграмме на рисунке 7:

Рисунок 7

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

Структура базы данных.

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

Пользователи системы имеют определённый список ролей, от которых зависит их уровень доступа ресурсам и функциональным возможностям приложения. У каждого зарегистрированного пользователя есть возможность иметь от одной до трёх ролей. Исходя из данного требования для хранения данных о пользователях были созданы 2 таблицы: users и users_roles, они представлены на рисунке 8.

Рисунок 8

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

Таблица users_roles хранит только два значения: идентификатор пользователя (id) и название роли. Поле с идентификатором пользователя ссылается на таблицу users при помощи внешнего ключа, при удалении или изменении данных о пользователе, удаление или изменение в таблице users_roles произойдёт автоматически.

Помимо пользователей основной сущностью системы является квест. Каждый квест состоит из неограниченного количества уровней, а уровень может содержать любое количество подсказок и ответов-ключей. Таким образом в базе данных фигурируют следующие основные таблицы: quests (квест), level (уровень), prompting (подсказка), keys (ключ, ответ). Связь между ними происходит по внешним ключам: у таблицы level есть ссылка на таблицу quests, у prompting и keys на таблицу level. Схема взаимодействия отражена на рисунке 9.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6