Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Study

Avatar for forceres forceres
November 14, 2023

 Study

Avatar for forceres

forceres

November 14, 2023

Other Decks in Programming

Transcript

  1. Введение Разработка информационных систем является важной задачей в наше время,

    поскольку они используются в различных сферах жизни, начиная от бизнеса и медицины и заканчивая различными государственными учреждениями и общественными организациями. При этом требования к информационным системам, такие как масштабируемость, безопасность и производительность, становятся все более жесткими.
  2. Информационная система «Записная книжка»  Информационная система «Записная книжка» представляет

    собой серверное приложение, предназначенное для управления списками задач. В системе имеются различные роли пользователей, такие как администратор, модератор и обычный пользователь. Каждый пользователь может создавать списки задач, добавлять задачи в эти списки, отмечать выполненные задачи и удалять задачи, которые больше не нужны. Для использования системы необходима авторизация пользователя. Все данные в системе хранятся в базе данных, которая обеспечивает безопасность и целостность информации.
  3. Выбор фреймворка В связи с требованиями к информационным системам, разработчикам

    необходимо выбирать правильные инструменты и технологии для создания информационных систем. Существует множество серверных фреймворков, но одним из наиболее популярных является NestJS. Он основан на Node.js и предоставляет широкий набор инструментов для разработки серверных приложений. NestJS также использует TypeScript, что упрощает разработку и делает код более понятным.
  4. Преимущества NestJS Для лучшего понимания возможностей NestJS рассмотрим его основные

    преимущества, которые делают этот фреймворк идеальным выбором для создания масштабируемых серверных приложений:
  5.  Масштабируемость. Благодаря встроенным инструментам управления состоянием приложения и поддержке

    множества шаблонов проектирования, таких как Dependency Injection. Это позволяет разработчикам легко масштабировать приложение в соответствии с изменяющимися потребностями бизнеса.  Typescript. NestJS построен на языке программирования TypeScript, который является строго типизированным языком, позволяющим обнаруживать ошибки на этапе компиляции. Это делает код более стабильным и надежным, а также более интуитивно понятным для разработчиков, знакомых с объектно- ориентированным программированием.  Модульность. Позволяет создавать собственные модули, которые можно переиспользовать в разных частях приложения. Это упрощает поддержку и масштабирование приложения, а также ускоряет процесс разработки и улучшает повторное использование кода.
  6.  Встроенные инструменты. Разработчики обладают множеством встроенных инструментов, которые значительно

    упрощают процесс разработки приложений. Например, фреймворк предоставляет встроенный механизм маршрутизации, который позволяет определять маршруты для приложения, а также механизм обработки ошибок, который упрощает их обработку и уведомление пользователей об их возникновении.  Websocket. Поддержка протокола WebSocket делает фреймворк идеальным инструментом для создания реактивных приложений, в которых данные должны поступать и обрабатываться в режиме реального времени. А также предоставляет удобный API для работы с WebSocket и обработки сообщений в реальном времени.
  7.  Поддержка многопоточности и асинхронности. Современные приложения должны обрабатывать большие

    объемы данных и выполнять множество операций одновременно. NestJS позволяет создавать многопоточные приложения, что значительно повышает их производительность и эффективность. Кроме того, фреймворк предоставляет удобный и простой способ для работы с асинхронными операциями, такими как обращение к базе данных или отправка запросов на внешние сервисы.  Широкий набор встроенных инструментов для тестирования. Широкий набор инструментов и библиотек для тестирования приложений позволяет создавать надежные и стабильные приложения, которые могут пройти множество тестов на различных уровнях. Фреймворк имеет встроенную поддержку для тестирования и автоматического тестирования, что делает процесс тестирования проще и более эффективным.
  8. Реальный опыт Опыт разработки информационной системы «Записная книжка» на основе

    фреймворка NestJS подтверждает его превосходство по ряду параметров перед другими средствами разработки серверных приложений. Система была разработана с использованием модульной архитектуры, что обеспечило ее масштабируемость и гибкость. Она состояла из пяти модулей:
  9. Модуль пользователей  Модуль пользователей является отдельным компонентом информационной системы,

    который реализует функциональность по получению, удалению и изменению данных пользователей. Доступ к данному модулю предоставляется только пользователям с ролью администратора или модератора, при этом доступ к модулю ограничивается с помощью RoleGuard, который проверяет роль пользователя. Применение RoleGuard в компоненте реализовано с помощью декоратора UseGuards, который является встроенным инструментом фреймворка NestJS.
  10. Модуль авторизации Модуль авторизации представляет собой ключевой компонент информационной системы,

    ответственный за обеспечение безопасности пользовательских данных и механизмов аутентификации и авторизации пользователей. Он реализует логику регистрации пользователей, получения информации об их учетных записях, изменения паролей, а также обработку и проверку учетных данных при попытке аутентификации и авторизации.
  11.  В рамках аутентификации используется LocalStrategy, предоставляемая пакетом Passport.js, который

    входит в состав инструментов NestJS. Для обеспечения контроля за доступом используется LocalAuthGuard, реализованный с помощью встроенного в NestJS декоратора UseGuards. Для авторизации пользователей применяется JwtStrategy, также реализованная с помощью встроенного инструмента NestJS JwtModule.  При этом, регистрация пользователя предполагает валидацию и создание записи пользователя в базе данных, реализованных с помощью Sequelize. NestJS позволяет легко взаимодействовать с Sequelize и предоставляет готовые средства валидации в виде ValidationPipe. Получение информации об учетной записи пользователя требует наличия состояния авторизованности, контроль за которым обеспечивается JwtAuthGuard.  Таким образом, модуль авторизации включает в себя механизмы аутентификации и авторизации пользователей, а также предоставляет функционал по управлению учетными записями пользователей в системе.
  12. JwtStrategy  JwtStrategy, используемая для авторизации пользователей в модуле авторизации,

    представляет собой стратегию аутентификации, основанную на токенах JSON Web Token (JWT), которые позволяют безопасно передавать информацию между сторонами в форме объектов JSON. JWT-токен содержит информацию об авторизованном пользователе, которая шифруется и подписывается с помощью секретного ключа на сервере, что обеспечивает безопасность передаваемой информации. При получении запроса на доступ к защищенному ресурсу, сервер проверяет валидность JWT-токена и наличие необходимых прав доступа у пользователя, передавшего токен.
  13. Модуль ролей  Модуль ролей представляет собой отдельный компонент системы,

    реализующий функциональность управления ролями для учетных записей. Данный модуль обладает всего одним endpoint, доступ к которому предоставляется только администраторам и модераторам. Описанный endpoint позволяет получить информацию о всех существующих ролях в базе данных. Важно отметить, что данный модуль является компонентом, непосредственно задействованным в других модулях и алгоритмах, таких как RoleGuard и модуль пользователей.
  14. Модули списков и задач  Модули списков и задач представляют

    собой два компонента, имеющих сходную структуру и реализующих функционал создания, редактирования, получения и удаления списков и задач соответственно. Данные компоненты также отвечают за взаимодействие с БД, используя SequelizeORM. Перед выполнением каждой операции необходимо проходить процесс авторизации, который реализуется при помощи JwtAuthGuard.
  15. Эмпирические преимущества фреймворка  В процессе разработки системы были замечены

    главные преимущества фреймворка NestJS. В частности, удобная и интуитивно понятная структура кода, которая способствовала повышению скорости разработки и облегчению поддержки системы. Использование декораторов и провайдеров позволило упростить инжектирование зависимостей и обработку запросов. Кроме того, встроенная поддержка статусов HTTP-запросов обеспечила быстрое реагирование на ошибки и сбои в работе приложения, а использование встроенного механизма валидации данных повысило уровень безопасности системы.
  16.  Однако, еще одним важным преимуществом, которое предоставил фреймворк NestJS,

    была возможность для реализации тестирования приложения. Это позволило быстро проверять работоспособность приложения и обеспечило более высокое качество кода. Путем реализации E2E- тестирования, была осуществлена проверка работоспособности системы на различных уровнях и выявлены возможные ошибки и проблемы. В результате, использование фреймворка NestJS привело к созданию высококачественной и надежной системы.
  17. Заключение  Использование фреймворка NestJS для создания информационной системы «Записная

    книжка» позволило продемонстрировать множество его преимуществ и подтвердило его превосходство перед другими инструментами разработки серверных приложений. Проект доступен на GitHub и может быть использован в качестве примера для изучения применения преимуществ NestJS.  Благодаря своей эффективности, модульности и гибкости, NestJS действительно позволяет создавать серверные приложения, которые могут легко масштабироваться и поддерживаться. В целом, использование NestJS является одним из лучших способов для создания масштабируемых информационных систем, которые могут быть легко поддерживаемыми и расширяемыми в будущем.