Файл: Разработка приложения справочной службы аэропорта.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.03.2023

Просмотров: 859

Скачиваний: 13

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Изображение 5. Выбор проекта

Следующий шаг – определение имени проекта и пути к папке сохранения. (Изображение 6. Имя и путь).

Изображение 6. Имя и путь

Далее нужно определиться с изначальным функционалом, предоставляемым фреймворком (Изображение 7. Выбор функционала). На данном шаге есть возможность выбора весьма богатых возможностей для приложения, таких как применение аутентификации и авторизации, применение дополнительных, сторонних frontend библиотек. Так как нет необходимости в загрузке системы с неиспользуемым функционалом, был выбран проект Empty, что означает, что нам будет предоставлен лишь скелет будущей программы.

Изображение 7. Выбор функционала

Затем в уже подготовленной системе, можно начинать описывать модель данных. Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние. На данном этапе производства приложения была описана модель данных в соответствии с шаблоном MVC. (Изображение 8. Модель данных – Flight).

Изображение 8. Модель данных – Flight

В частности, был описан класс Flight, который и представляет модель данных. Данный класс включает открытые свойства, необходимые для идентификации рейса, а также несут важную для пользователя информацию. На изображении 8 виден класс FlightViewModel, который используется в качестве контейнера данных, вводимых клиентом в форму, и последующем использовании при выборки нужных полей из базы данных. В качестве СУБД была выбрана SQL Lite, ввиду простоты использования в рамках создания приложения. Данная СУБД не предназначена для производственного использования.

Далее был написан класс контекста необходимый для взаимодействия с базой данных и Entity Framework Core (Изображение 9. Класс контекста данных). Entity Framework Core (EF Core) представляет собой объектно-ориентированную, легковесную и расширяемую технологию от компании Microsoft для доступа к данным. EF Core является ORM-инструментом (object-relational mapping - отображения данных на реальные объекты). То есть EF Core позволяет работать базами данных, но представляет собой более высокий уровень абстракции: EF Core позволяет абстрагироваться от самой базы данных и ее таблиц и работать с данными независимо от типа хранилища. Если на физическом уровне мы оперируем таблицами, индексами, первичными и внешними ключами, но на концептуальном уровне, который нам предлагает Entity Framework, мы уже работаем с объектами.


Изображение 9. Класс контекста данных

После миграции и обновления базы данных, EF сгенерировал необходимую таблицу для хранения данных о рейсах. Как видно на изображении 10, был сгенерирован SQL код описания таблицы в базе данных. Данный подход к работе с Entity Framework называется Code First, когда сначала на языке C# описывается класс, и на основании этого кода генерируется SQL скрипт, создаются таблицы, а не на оборот, как при подходе Database First. Стоит упомянуть еще один подход, такой как Model First. Суть данного подхода состоит в том, что сначала делается модель с помощью графического описания, а потом по ней создается база данных.

Изображение 10. Схема таблицы «Flights»

Последним действием на данном этапе было наполнение базы данных случайными данными, для тестирования приложения и возможности продемонстрировать функционал в рамках данной работы (Изображение 11. Случайные данные).

Изображение 11. Случайные данные

2.3. Описание представлений

Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.

На данном этапе было необходимо написать код для визуальной части приложение (интерфейс, формы, и т.д.). При написании был использован язык разметки HTML и вспомогательные средства Razor, а также последняя версия frontend фреймворка Bootstrap.

Для ухода от повторяемости кода, в ASP.NET Core предусмотрены разделяемые ресурсы такие как Layouts. Так как дизайн приложений устроен таким образом, что большинство графических элементов на страницах идентичны, и только лишь основной функционал выбранной страницы подвержен изменениям, ASP.NET Core предлагает помещать повторяющийся код в Layouts, тогда как основной функциональный код остается на уникальных страницах. Таким образом был описан _Layout.cshtml (Изображение 12. HTML код Layout). На данной странице описаны основные части

Изображение 12. HTML код Layout

приложения. В частности, описаны верхнее навигационное меню, а также нижнее с указанием названия и даты производства приложения (Изображение 13. Главный вид).

Изображение 13. Главный вид

Далее была описана основная страница Index, на которой написана форма для ввода данных желаемого рейса клиентом (Изображение 13. Главный вид). Также была описана страница List для отображения выборки данных по запросу пользователя (Изображение 14. HTML код таблица информации по выбранным рейсам (Изображение 2. Список выбранных рейсов).


Изображение 14. HTML код таблица информации по выбранным рейсам

Затем была описана страница NotFound, с указанием на ошибку в случае, если в базе не нашлось совпадений с введенными данными пользователя. Также описана ссылка на повторный поиск (Изображение 15. HTML код страницы ошибки, Изображение 3. Ошибка).

Изображение 15. HTML код страницы ошибки

Для корректного отображения разметки приложения были активно использованы средства фреймворка Bootstrap 4, что значительно сократило процесс создания не сложного, но читаемого интерфейса. Для того чтобы Bootstrap работал в проекте, нам необходимо загрузить пакеты прямо в приложение. В ASP.NET Core для хранения таких пакетов предусмотрена папка wwwroot (Изображение 16. папка wwwroot).

Изображение 16. папка wwwroot

Таким образом были описаны основные страницы, интерфейс, формы для взаимодействия клиента с приложением.

2.4. Описание контроллеров

Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений. Центральным звеном в архитектуре ASP.NET Core MVC является контроллер. При получении запроса, система маршрутизации выбирает для обработки запроса нужный контроллер и передает ему данные запроса. Контроллер обрабатывает эти данные и посылает обратно результат обработки.

На данном этапе были написаны методы контроллера HomeController, необходимые для взаимодействия представлений с базой данных. Весь код написан на языке программирования C#, с использованием LINQ для фильтрации данных в одну строку, что значительно снижает общее количество кода, без вреда функциональности и производительности приложения. В данном приложении был использован лишь один контроллер – HomeController. Данный класс наследуется от базового класса Controller, который является частью ASP.NET Core. Он предоставляет производному классу обширный функционал, который позволяет ему взаимодействовать с представлениями и базой данных. На изображении 17 показано, как осуществляется создание экземпляра контекста в конструкторе класса HomeController, а также метод Index, который отображает основную страницу приложения.

Изображение 17.1. HomeController

На изображении 17.2 показан метод Index с атрибутом [POST], что означает, что запрос возможно изменит данные в базе. Данный метод использует в качестве параметра класс FlightViewModel, который представляет собой капсулу для данных, поступающих из формы в представлении Index. Метод проверяет модель на валидность, далее в условном операторе параметр проверяется на null. Если все проверки вернули true, создается экземпляр класса List<Flight> с именем flights, в который по средствам языка LINQ происходит выборка из базы данных.


Изображение 17.2. HomeController

Затем, в условном операторе проверяется количество элементов, добавленных на пред идущем этапе. Если оператор возвращает true, то вызывается метод List, с указанным в качестве параметра коллекции flights, который в свою очередь рендерит таблицу с выбранными данными (Изображение 17.3 HomeController). Если же на этапе первых проверок коллекция flights оказалась пустой, то метод Index вернет представление NotFound (Изображение 3. Ошибка).

Изображение 17.3. HomeController

Также было необходимо написать класс Startup.cs. Класс Startup является входной точкой в приложение ASP.NET Core. Этот класс производит конфигурацию приложения, настраивает сервисы, которые приложение будет использовать, устанавливает компоненты для обработки запроса или middleware. Был написан метод ConfigureServices, который регистрирует сервисы, используемые приложением. В качестве параметра он принимает объект IServiceCollection, который и представляет коллекцию сервисов в приложении. С помощью методов расширений этого объекта, производится конфигурация приложения для использования сервисов. Все методы имеют форму Add[название_сервиса] (Изображение 18.1. Startup.cs).

Изображение 18.1. Startup.cs

Далее был реализован метод Configure. Метод Configure устанавливает, как приложение будет обрабатывать запрос. Этот метод является обязательным. Для установки компонентов, которые обрабатывают запрос, используются методы объекта IApplicationBuilder. Объект IApplicationBuilder является обязательным параметром для метода Configure (Изображение 18.2. Startup.cs). Кроме того, метод нередко принимает еще один необязательный параметр - объект IWebHostEnvironment, который позволяет получить информацию о среде, в которой запускается приложение, и взаимодействовать с ней. Но в принципе, в метод Configure в качестве параметра может передаваться любой сервис, который зарегистрирован в методе ConfigureServices или который регистрируется для приложения по умолчанию (например, IWebHostEnvironment).

Изображение 18.2. Startup.cs

Также был реализован основной класс приложения Program (Изображение 19. Program). Чтобы запустить приложение ASP.NET Core, необходим объект IHost, в рамках которого развертывается веб-приложение. Для создания IHost применяется объект IHostBuilder.

В программе по умолчанию в статическом методе CreateHostBuilder, как раз создается и настраивается IHostBuilder. Непосредственно создание IHostBuilder производится с помощью метода Host.CreateDefaultBuilder(args).


Данный метод выполняет ряд задач.

  1. Устанавливает корневой каталог (для этого используется свойство Directory.GetCurrentDirectory). Корневой каталог представляет папку, где будет производиться поиск различного содержимого, например, представлений;
  2. Устанавливает конфигурацию хоста. Для этого загружаются переменные среды с префиксом "DOTNET_" и аргументы командной строки;
  3. Устанавливает конфигурацию приложения. Для этого загружается содержимое из файлов appsettings.json и appsettings.{Environment}.json, а также переменные среды и аргументы командной строки. Если приложение в статусе разработки, то также используются данные Secret Manager (менеджера секретов), который позволяет сохранить конфиденциальные данные, используемые при разработке;
  4. Добавляет провайдеры логгирования;
  5. Если проект в статусе разработки, то также обеспечивает валидацию сервисов;

Далее вызывается метод ConfigureWebHostDefaults(). Этот метод призван выполнять конфигурацию параметров хоста, а именно;

  1. Загружает конфигурацию из переменных среды с префиксом "ASPNETCORE_";
  2. Запускает и настраивает веб-сервер Kestrel, в рамках которого будет разворачиваться приложение;
  3. Добавляет компонент Host Filtering, который позволяет настраивать адреса для веб-сервера Kestrel;
  4. Если переменная окружения ASPNETCORE_FORWARDEDHEADERS_ENABLED равна true, добавляет компонент Forwarded Headers, который позволяет считывать из запроса заголовки "X-Forwarded-";
  5. Если для работы приложения требуется IIS, то данный метод также обеспечивает интеграцию с IIS;

Метод ConfigureWebHostDefaults в качестве параметра принимает делегат Action<IWebHostBuilder>, а помощью последовательного вызова цепочки методов у объекта IWebHostBuilder производится инициализация веб-сервера, для развертывания веб-приложения.

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

В методе Main вызывается метод у созданного объекта IHostBuilder, на котором вызывается метод Build, собственно который создает хост - объект IHost, в рамках которого развертывается веб-приложение. А затем для непосредственного запуска у IHost вызывается метод Run:

После этого приложение запущено, и веб-сервер начинает прослушивать все входящие HTTP-запросы.

Изображение 19. Program.cs

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