В этой статье мы рассмотрим архитектуру Onion в ASP.Net 5.0. Как мы все знаем, это недавно запущенный фреймворк, официально выпущенный в ноябре. Здесь я делюсь ссылкой для установки SDK для .Net 5

Поддержите меня

Что мы собираемся охватить в этой луковой архитектуре .NET 5?

  • Что такое луковая архитектура
  • Слои луковой архитектуры
  • Реализация луковой архитектуры
  • За и против

Что такое луковая архитектура?

Большая часть обычного дизайна поднимает основные проблемы, связанные с тесной связью и разделением проблем. Джеффри Палермо познакомил с Onion Architecture, предлагая превосходный метод для создания приложений в контексте лучшей тестируемости, практичности и постоянства. Луковая архитектура имеет тенденцию к трудностям, с которыми сталкиваются трехуровневые и многоуровневые архитектуры, и дает ответ на обычные проблемы. Слои дизайна лука связываются друг с другом с помощью интерфейсов.

Слои луковой архитектуры

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

Уровень домена

Он существует в центральной части архитектуры Onion, где он состоит из всех сущностей домена приложения, которые являются не чем иным, как моделями баз данных, созданными с помощью подхода «сначала код». В этом проекте я использовал Fluent API для создания схемы таблицы с помощью Entity Framework.

Уровень репозитория

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

Уровень служб

Этот уровень используется для связи между уровнем репозитория и основным проектом, где он состоит из доступных API. Уровень услуг также может содержать бизнес-логику для объекта. На этом уровне сервисные интерфейсы отделены от их реализации для слабой связи, а также разделения задач.

Уровень пользовательского интерфейса

Пользовательский интерфейс - это не что иное, как интерфейсное приложение, которое будет взаимодействовать с этим API.

Реализация луковой архитектуры

Создать новый проект

После нажатия кнопки «Далее» добавьте имя проекта и имя решения и нажмите кнопку «Создать».

Выберите шаблон ASP.Net Core 5.0 в раскрывающемся списке, а также убедитесь, что установлен флажок Включить поддержку Open API для реализации Swagger по умолчанию в вашем проекте.

Будет создан проект по умолчанию, и теперь нам понадобятся 3 пустых проекта библиотеки классов (.Net Core) внутри этого приложения как

  • DomainLayer
  • RepositoryLayer
  • ServicesLayer

Сначала мы начнем с уровня домена

Уровень домена

Пакеты, используемые в этом слое

  • Microsoft.EntityFrameworkCore (5.0.3)
  • Microsoft.EntityFrameworkCore.Relational (5.0.3)

Создайте папку с именем Модели и внутри нее создайте класс клиента и класс BaseEntity, где класс клиента вызывает эту базовую сущность.

BaseEntity.cs

Customer.cs

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

CustomerMap.cs

Структура уровня домена

Уровень репозитория

Пакеты, используемые в этом слое

  • Microsoft.EntityFrameworkCore (5.0.3)
  • Microsoft.EntityFrameworkCore.Design (5.0.3)
  • Microsoft.EntityFrameworkCore.SqlServer (5.0.3)
  • Microsoft.EntityFrameworkCore.Tools (5.0.3)

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

appsettings.json

Настройте соединение в файле startup.cs в ConfigureMethod.

Startup.cs

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

ApplicationDbContext.cs

Давайте создадим таблицу на SQL с помощью команд миграции. Откройте консоль диспетчера пакетов, переключите проект по умолчанию на Repositorylayer и выполните следующие команды одну за другой.

Команды для выполнения

  • Добавление миграции «CreateCustomerTable»
  • Обновление базы данных

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

IRepository.cs

Создайте класс репозитория для выполнения операций с базой данных, которые наследуют интерфейс IRepository.

Repository.cs

Структура уровня репозитория

Уровень обслуживания

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

ICustomerService.cs

CustomerService.cs

Настройте эти службы в файле startup.cs

Startup.cs

Создайте методы API в клиентском контроллере, которые доступны пользовательскому интерфейсу (клиентское приложение).

CustomerController.cs

Структура проекта луковой архитектуры

Давайте запустим и протестируем это приложение, чтобы проверить результат в чванстве или почтальоне.

Поскольку я уже вставил одну запись в базу данных с помощью InserCustomer API, мы увидим данные, выполнив Get ALL Customers API.

Плюсы и минусы луковой архитектуры

Ниже приведены преимущества реализации луковой архитектуры:

  • Уровни луковой архитектуры связаны через интерфейсы. Имплантации выполняются во время выполнения.
  • Разработка приложений основана на модели области.
  • Все внешние зависимости, аналогичные вызовам допуска и администрирования набора данных, обрабатываются на внешних уровнях.
  • Нет условий внутреннего слоя с внешними слоями.
  • Муфты ближе к середине.
  • Адаптируемый и практичный и удобный дизайн.
  • Нет веских причин для нормальной и совместной деятельности.
  • Можно сразу попробовать в свете того, что центр приложений ни на что не полагается.

Вот пара недостатков луковой архитектуры:

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


Надеюсь, эта статья поможет вам лучше понять архитектуру лука.

…. Продолжай учиться !!!