Обоснование инструментов разработки
Принципы выбора инструментов для разработки:
· программное обеспечение должно быть бесплатным;
· программное обеспечение должно позволять выполнять отладку в домашних условиях, т.е. без необходимости каждый раз вносить изменения в проект непосредственно на web-сервере;
· независимость от платформы.
С учетом приведенных принципов был выбран следующий набор инструментов: HTML, CSS, JavaScript, Node.js, MongoDB, AngularJS.
Для работы с графикой был выбран пакет Paint NET 3.2.1, который является наиболее известным и популярным среди бесплатных программ. Paint NET содержит весь необходимый набор для работы с графическими изображениями.
HTML - HyperText Markup Language - стандартный язык программирования, предназначенный для создания гипертекстовых документов в среде WEB.
HTML-документы могут просматриваться различными типами WEB-браузеров. Когда документ создан с использованием HTML, WEB-браузер может интерпретировать HTML для выделения различных элементов документа и первичной их обработки. Использование HTML позволяет форматировать документы для их представления с использованием шрифтов, линий и других графических элементов на любой системе, их просматривающей.
Большинство документов имеют стандартные элементы, такие, как заголовок, параграфы или списки. Используя тэги HTML можно обозначать данные элементы, обеспечивая WEB-браузеры минимальной информацией для отображения данных элементов, сохраняя в целом общую структуру и информационную полноту документов. Все что необходимо, чтобы прочитать HTML-документ - это WEB-браузер, который интерпретирует тэги HTML и воспроизводит на экране документ.
CSS (Cascading Style Sheeets) - каскадные таблицы стилей. Стиль - набор параметров, задающий внешнее представление объекта.
Преимущества CSS:
· CSS позволяет значительно сократить размер кода и сделать его читабельным;
· CSS позволяет задавать такие параметры, которые нельзя задать только языком HTML. Например, убрать подчеркивание у ссылок;
· CSS позволяет легко изменять внешний вид страниц.
· с CSS связана так называемая блочная верстка сайта.
JavaScript - это язык написания сценариев, разработанный компанией Netscape Communications, для создания клиентских и серверных интернет-приложений. Netscape Navigator создан для интерпретации сценариев JavaScript, внедренных в веб-страницы.
JavaScript – объектно-ориентированный скриптовый язык программирования. Является диалектом языка ECMAScript.
JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.
Основные архитектурные черты: динамическая типизация, слабая типизация, автоматическое управление памятью, прототипное программирование, функции как объекты первого класса.
Node или Node.js – программная платформа, основанная на движке V8, превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и Mac OS) и даже программировать микроконтроллеры (например, tessel и espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом. Популярность в области построения web-сайтов определяется наличием большого набора встроенных средств и крупнейшего менеджера подключаемых пакетов npmjs.com для разработки web-приложений.
Основные из них:
· извлечение POST и GET-параметров, а также переменных окружения web-сервера в предопределённые массивы;
· отправка HTTP-заголовков;
· работа с cookies и сессиями;
· обработка файлов, загружаемых на сервер;
· работа с HTML заголовками и HTTP авторизацией.
MongoDB – документоориентированная система управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы таблиц. Классифицирована как NoSQL, использует JSON-подобные документы и схему базы данных. Написана на языке C++.
СУБД управляет наборами JSON-подобных документов, хранимых в двоичном виде в формате BSON. Хранение и поиск файлов в MongoDB происходит благодаря вызовам протокола GridFS. Подобно другим документоориентированным СУБД (CouchDB и др.), MongoDB не является реляционной СУБД. В MongoDB:
· Нет такого понятия, как «транзакция». Атомарность гарантируется только на уровне целого документа, то есть частичного обновления документа произойти не может.
· Отсутствует понятие «изоляции». Любые данные, которые считываются одним клиентом, могут параллельно изменяться другим клиентом.
В MongoDB реализована асинхронная репликация в конфигурации «ведущий — ведомый» (англ. master — slave), основанная на передаче журнала изменений с ведущего узла на ведомые. Поддерживается автоматическое восстановление в случае выхода из строя ведущего узла. Серверы с запущенным процессом mongod должны образовать кворум, чтобы произошло автоматическое определение нового ведущего узла. Таким образом, если не используется специальный процесс-арбитр (процесс mongod, только участвующий в установке кворума, но не хранящий никаких данных), количество запущенных реплик должно быть нечётным.
Преимуществами MongoDB являются:
· Индексация. В MongoDB имеется поддержка индексов.
· Балансировка нагрузки. MongoDB масштабируется горизонтально используя шардинг.
· Файловое хранилище. MongoDB может быть использован в качестве файлового хранилища с балансировкой нагрузки и репликацией данных.
· Исполнение JavaScript на стороне сервера. JavaScript может использоваться в запросах, функциях аггрегации (например в MapReduce) и отправлен базе для исполнения.
· Ad hoc запросы. Запросы могут возвращать конкретные поля документов и пользовательские JavaScript- функции. Поддерживается поиск по регулярным выражениям.
AngularJS – JavaScript-фреймворк с открытым исходным кодом. Предназначен для разработки одностраничных приложений. Его цель — расширение браузерных приложений на основе MVC-шаблона, а также упрощение тестирования и разработки.
Фреймворк работает с HTML, содержащим дополнительные пользовательские атрибуты, которые описываются директивами, и связывает ввод или вывод области страницы с моделью, представляющей собой обычные переменные JavaScript. Значения этих переменных задаются вручную или извлекаются из статических или динамических JSON-данных.
AngularJS спроектирован с убеждением, что декларативное программирование лучше всего подходит для построения пользовательских интерфейсов и описания программных компонентов, в то время как императивное программирование отлично подходит для описания бизнес-логики. Фреймворк адаптирует и расширяет традиционный HTML, чтобы обеспечить двустороннюю привязку данных для динамического контента, что позволяет автоматически синхронизировать модель и представление. В результате AngularJS уменьшает роль DOM-манипуляций и улучшает тестируемость. Angular придерживается MVC-шаблона проектирования и поощряет слабую связь между представлением, данными и логикой компонентов. Используя внедрение зависимости, Angular переносит на клиентскую сторону такие классические серверные службы, как видозависимые контроллеры. Следовательно, уменьшается нагрузка на сервер и веб-приложение становится легче.
Сильными сторонами AngularJS являются:
· Отделение DOM-манипуляции от логики приложения, что улучшает тестируемость кода.
· Отношение к тестированию как к важной части разработки. Сложность тестирования напрямую зависит от структурированности кода.
· Разделение клиентской и серверной стороны, что позволяет вести разработку параллельно.
· Проведение разработчика через весь путь создания приложения: от проектирования пользовательского интерфейса, через написание бизнес-логики, к тестированию.
Express.js, или просто Express – каркас web-приложений для Node.js, реализованный как свободное и открытое программное обеспечение под лицензией MIT. Он спроектирован для создания веб-приложений и API. Де-факто является стандартным каркасом для Node.js. Автор фреймворка, TJ Holowaychuk, описывает его как созданный на основе написанного на языке Ruby каркаса Sinatra, подразумевая, что он минималистичен и включает большое число подключаемых плагинов. Express может являться backend'ом для программного стека MEAN, вместе с базой данных MongoDB и каркасом AngularJS для frontend'а.
Плюсы Express.js:
· Минималистичность. Express - это минималистичный и гибкий веб-фреймворк для приложений Node.js, предоставляющий обширный набор функций для мобильных и веб-приложений.
· API. Имея в своем распоряжении множество служебных методов HTTP и промежуточных обработчиков, создать надежный API можно быстро и легко.
· Производительность. Express предоставляет тонкий слой фундаментальных функций веб-приложений, которые не мешают вам работать с давно знакомыми и любимыми вами функциями Node.js.
Реализация