Структура слоев:
- (зависимости: приложение и инфраструктура только для целей внедрения внедрения)
Код: Выделить всё
API - (зависимости: приложение)
Код: Выделить всё
Infrastructure - (зависимости: домен)
Код: Выделить всё
Application - (независимый)
Код: Выделить всё
Domain
Проблема 1: учитывая тот факт, что уровень контрактов независим, работа с файлами — это ад. Я не могу использовать IFormFile в запросах DTO, поскольку сам уровень представляет собой простую библиотеку классов.
Проблема 2: уровень контрактов не может зависеть от уровня домена, поскольку он может раскрывать логику домена, вызывая проблему DRY. У меня есть простое перечисление Sex на слое домена:
Код: Выделить всё
namespace MovieStore.Domain.Users;
public enum Sex
{
Male = 0,
Female = 1
}
Проблема 3: имеет смысл разделить запрос уровня API и объекты команд CQRS уровня приложения, поскольку API может принять файл как IFormFile, в то время как уровень приложения команда ожидает Stream. Я не уверен, имеет ли смысл разделение объектов ответа API и приложения, поскольку они в основном идентичны (я не могу себе представить случай, когда они различаются). Дублирование потребует повторного сопоставления. Стоит ли оно того?
Разделение контрактов имеет больше минусов, чем плюсов. Я думаю, что хранить запросы/ответы на уровне API гораздо проще в обслуживании, но это не решает проблему №3, поскольку уровень приложения не видит DTO ответов уровня API, что приводит к дублированию.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-net-10
Мобильная версия