В этой статье мы рассмотрим архитектуру 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.
Плюсы и минусы луковой архитектуры
Ниже приведены преимущества реализации луковой архитектуры:
- Уровни луковой архитектуры связаны через интерфейсы. Имплантации выполняются во время выполнения.
- Разработка приложений основана на модели области.
- Все внешние зависимости, аналогичные вызовам допуска и администрирования набора данных, обрабатываются на внешних уровнях.
- Нет условий внутреннего слоя с внешними слоями.
- Муфты ближе к середине.
- Адаптируемый и практичный и удобный дизайн.
- Нет веских причин для нормальной и совместной деятельности.
- Можно сразу попробовать в свете того, что центр приложений ни на что не полагается.
Вот пара недостатков луковой архитектуры:
- Трудно понять любителям, включая ожидание усвоения информации. Моделисты обычно перемешивают обязанности между слоями.
- Интенсивно используемые интерфейсы
Надеюсь, эта статья поможет вам лучше понять архитектуру лука.
…. Продолжай учиться !!!