Чистая архитектура и контракты API в .NET 10C#

Место общения программистов C#
Ответить
Anonymous
 Чистая архитектура и контракты API в .NET 10

Сообщение Anonymous »

Я создаю веб-API ASP.NET Core 10. Я изо всех сил стараюсь следовать принципам чистой архитектуры вместе с CQRS (MediatR).
Структура слоев: Существует тенденция помещения контрактов (запросов и ответов) в отдельный независимый проект или слой для совместного использования с другими системами. Я столкнулся с несколькими проблемами при таком подходе и хотел бы услышать чье-то мнение по этому поводу.
Проблема 1: учитывая тот факт, что уровень контрактов независим, работа с файлами — это ад. Я не могу использовать IFormFile в запросах DTO, поскольку сам уровень представляет собой простую библиотеку классов.
Проблема 2: уровень контрактов не может зависеть от уровня домена, поскольку он может раскрывать логику домена, вызывая проблему DRY. У меня есть простое перечисление Sex на слое домена:

Код: Выделить всё

namespace MovieStore.Domain.Users;

public enum Sex
{
Male = 0,
Female = 1
}
Когда я хочу определить запрос DTO для создания пользователя, мне нужно создать дубликат перечисления моего домена, что требует дальнейшего сопоставления. Дублирование можно исправить, определив пол как int в запросе, а затем сопоставив его с Sex в моем обработчике, но такой подход вызывает проблемы с документацией API (перечисления хорошо документируются OpenAPI, тогда как int ничего не говорит о параметрах).
Проблема 3: имеет смысл разделить запрос уровня API и объекты команд CQRS уровня приложения, поскольку API может принять файл как IFormFile, в то время как уровень приложения команда ожидает Stream. Я не уверен, имеет ли смысл разделение объектов ответа API и приложения, поскольку они в основном идентичны (я не могу себе представить случай, когда они различаются). Дублирование потребует повторного сопоставления. Стоит ли оно того?
Разделение контрактов имеет больше минусов, чем плюсов. Я думаю, что хранить запросы/ответы на уровне API гораздо проще в обслуживании, но это не решает проблему №3, поскольку уровень приложения не видит DTO ответов уровня API, что приводит к дублированию.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-net-10
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»