Выбор аппаратных и программных средствдля разработки программного комплекса
Исходя из поставленной задачи разработки веб-комплекса, его внедрение подразумевает использование веб-сервера. Веб-сервером выступает программное средство позволяющее принимать запросы и отправлять ответы по HTTPпротоколу. Это программное средство, в свою очередь, располагается на сервере.На сегодняшний день, любые медицинские учреждения (поликлиники, больницы) уже имеют в своем распоряжении сервера для хранения баз данных сотрудников, привязанных к учреждению клиентов и различной бухгалтерской информации.Размещение веб-сервера, а точнее программного средства, как правило, не мешает работе других программныхпродуктов, если соблюдаются рекомендуемые системные требования.Для полноценнойработы веб-комплекса рекомендуется 2Гб оперативной памяти, 5-20Гб свободного дискового пространства (зависит от количества сотрудников и клиентов), и процессор 3,2ГГц.
Среди существующих веб-серверов преимущественным выбором является Node, так как данная программная платформавыполняет задачу веб сервера и одновременнопредставляет среду для выполнения кода на JavaScript основанной на движке ChromeV8. Еще одним преимуществом Node в отличие от остальных средств, таких как, например PHP или .NETэто событийно-ориентированный подход к программированию, который позволяет осуществить неблокирующий ввод/вывод. Другими словами, во времяожидания выполнения какой-либо операции сервер не блокируется и позволяет работать с другими запросами, тем самым увеличивая возможность одновременных подключений и скорость ответов на запросы пользователей. Тогда как синхронный подход подразумевает обработку запросов последовательно, то есть, выполнение следующего запроса начнется после выполнения предыдущего. Это оказывает неэффективное распределение вычислительных ресурсов и большую часть времени сервер попросту простаивает. Основной недостаток Nodeзаключается в сложности проектирования серверной части программного средства. Необходимо позаботиться об очистке памяти после обработки каждого запроса, в противном случае произойдет утечка и потребуется перезагрузка сервера.
На текущий момент программная платформаNodeактивно развивается, для нее разработана масса библиотек и фреймворков, которые позволяют не только избавиться от недостатков, но и предоставляют дополнительные возможности в разработке. Nodeподдерживает язык программирования – CoffeeScript.Данный язык представляет собой обертку языка JavaScript (JS). CoffeeScriptимеет упрощенный синтаксис, чтоулучшает читаемость кода, уменьшает его размеры изаменяет сложные в реализации задачи на чистом JSна простые.Поэтому использование этого языка отлично подойдет дляреализации серверной части приложения.
В состав Nodeвходит установщик пакетов NPM. Пакет в Nodeэто набор JavaScriptфайлов, которые организуют различные инструменты для разработки программного средства. Одним из таких инструментов является фреймворк Express. Его использование дает такие возможности как удобство работы с запросами,структурированная маршрутизация, ориентированность на высокую производительность и диспетчер задач, который способен перезапустить веб-сервер в случае его отказа [7].
Фреймворк Expressв своей архитектуре использует шаблонМодель-Вид-Контроллер (MVC). Подход MVCподразумевает разделение структуры программного средства на три компонента: модель данных, управляющая логика и пользовательский интерфейс. Модель данных это сами данные и правила для работы над ними. Контроллер занимается обработкой HTTPзапросов и работает с соответствующей моделью. Представление обеспечивает отображение данных полученных из модели. Однако формирование представления на серверной части веб приложения, сказывается отрицательным образом на его производительности и отзывчивости интерфейса. Поэтомурольинтерфейса (Frontend) возьмет на себя технология «Приложение одной страницы» (SPA). Архитектура SPA заключается в работе веб приложения на одной странице. При заходе на сайт происходит загрузка всего интерфейса, всех разделов и модулей в виде JavaScriptи CSSфайлов. Тем самым результаты запросов исключают генерацию и передачу с сервера целых HTMLдокументов, авсе последующие запросы выполняются с использованием веб-службы REST, которая доставляет данные в формате JSON. Еще одним преимуществом использование SPAэто возможность кеширование JavaScriptфайлов в большинстве браузеров, за счет чего при повторной загрузке веб-приложения браузер загружает только новые файлы и использует уже загруженные,что ускоряет загрузку страницы и уменьшает нагрузку на сервер.
Существует множество JavaScriptфреймворков для реализации пользовательскогоSPA интерфейса, среди которых наиболее популярны: React, Angularи Backbone. Последние два используют MVCархитектуру, тогда как Reactотвечает только за визуализацию и применяет компонентнуюконцепциюв разработке. Суть этой концепции заключается в разделении интерфейса на самодостаточные компоненты (модальные окна, кнопки, поля и другие). Такие компоненты можно делать шаблонными, тем самым уменьшая дублирование программного кода. С помощью встроенной в React библиотеки VirtualDOMможно добиться высокой производительности приложения. Reactвместо воздействия на DOMнапрямую, работает с ее виртуальной копией. Работа с DOM происходит в три этапа:
1. Внесение определенных изменений в виртуальную копию DOM
2. Сравнение виртуальногоDOM-дерева с настоящим и определение разницы
3. В случае выявления разницы, происходит перерисовка измененных компонентов
Из этого следует, что происходит не глобальная перерисовка страницы, а частичная, то есть перерисовка только тех областей, где есть изменения, из-зачего увеличивается отзывчивость и производительность пользовательского интерфейса.
У компонентного подхода в Reactесть существенный недостаток. Передача данных происходит от компонента родителя к потомку. При этом если два компонента не связаны отношением родитель-потомок, и разработчик пытается установить взаимодействие между ними, это приводит к ошибкам и считается антипаттерном. Решением этой проблемы является архитектура Flux. К Reactпредставлению добавляются еще две дополнительные части: диспетчер (dispatch) и хранилище данных (store). Диспетчер в этой архитектуре выступает как ядро, которое управляет потоками данных, а хранилище содержит состояние приложения и его логику (функции, методы). Механизм работы Flux представлен на рисунке 2.1
Рисунок 2.1. Схема работы Flux
Глобальное хранилище регистрирует в диспетчере функции для изменения состояния и когда диспетчер получает событие действия, он вызывает метод внутри хранилища. После того как хранилище изменится, генерируется событие, которое сообщает подписанным на него представлениям что произошло обновление, а они в свою очередь перерисовывают компонент.Данный подход реализует библиотека Redux, которая помогает организовать хранилище и предоставляет инструменты для работы с ним. Данная библиотека разрабатывалась специально для React, не смотря на то, что ее можно использовать и в других фреймворках. СReduxвсе компоненты могут хранить свое состояние в глобальном хранилище. А действия, которые вызывают компоненты, так же отправляются в хранилище. Таким образом, компонент только инициирует изменение и не задумывается о компонентах, которые должны получить его. Разница взаимодействия компонентов на чистом Reactи на ReactcReduxхорошо отражена на рисунке 2.2.
Рисунок 2.2. Разница c использованием Redux
Такой подход уменьшает путаницу в программном коде и исключает возникновение ошибок при взаимодействии компонентов. Поэтому Reduxразумно использовать вместе с Reactпри разработке интерфейса.
Еще одна важнаячасть полноценного веб-комплекса это база данных (БД). Так какпланируется использоватьNodeдля серверной части приложения, то MongoDBбудет отличным выбором в ролиСУБД.Это обусловлено тем, что в Nodeесть инструменты направленные особенным образом именно на взаимодействие с этой СУБД.MongoDBэто документно-ориентированная система управления базами данных, которая отличается от привычных реляционных БД.Хранение данных осуществляется в бинарном формате JSON (BSON) что ускоряет работу с данными, быстрее выполняются обработка и поиск. Инструменты Nodeпозволяют с легкостью десериализовать данные БД из BSONформата в привычный для JavaScriptформат JSON. Помимо этого MongoDBне требует синхронизации схемы БД, и имеет динамические базы и коллекции. Поэтому в приложении нет необходимости знать структуру базы, что дает возможность ее легкой масштабируемости.
Обобщая результат выбранных технологий, для разработки веб-комплекса будут использованы следующие программные инструменты:
2. MongoDBкак СУБД программного средства
3. Серверная часть приложения на базе Node на языке CoffeScriptcфреймворком Expressв роле архитектуры REST
4. Интерфейс приложения – React Redux