Архитектура DDD

#c# #asp.net-core #domain-driven-design

Вопрос:

у меня есть этот вопрос, который я просто не могу понять Прямо сейчас, я внедряю архитектуру DDD в проекте .NET CORE, я создал 3 уровня, Приложение, Домен, Инфраструктуру, но есть проблема, в которой я не могу понять, я реализовал Шаблоны репозитория и IUnitOfWork, но в моей голове остается вопрос, доменный уровень будет выполнять бизнес-логику для данных, но как эти данные будут сохраняться в БД? поскольку доменный уровень не может иметь зависимостей от инфраструктуры, будет ли он отправлять данные обратно в приложение, а затем на уровне приложения отправлять в инфраструктуру? Или на уровне домена тоже будет файл ApplicationDbContext, как на уровне инфраструктуры?

Вот фрагмент моей текущей структуры папок!:

введите описание изображения здесь

Комментарии:

1. Это больше похоже на концептуальную проблему, а не на проблему кодирования. Вы проверили предыдущие вопросы и ответы в теге ddd на SE.SE

2. Да, это так, но все же, я думал, что на это может ответить кто угодно, в конце концов, это форум

3. проверяю это прямо сейчас

4. Ваш доменный проект должен зависеть от интерфейсов репозитория, но не от конкретных реализаций этих интерфейсов. Это паттерн «инверсии контроля».

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

Ответ №1:

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

Базовые уровни (Домен и приложение) никогда не будут зависеть от какого-либо другого уровня. Поэтому мы создаем интерфейсы на прикладном уровне, и эти интерфейсы реализуются на внешних уровнях. Это также известно как Принцип инверсии зависимостей.

Уровень инфраструктуры — это то место, куда вы хотели бы добавить свою инфраструктуру. Инфраструктура может быть любой. Возможно, базовый уровень Entity Framework для доступа к БД, включая контексты БД, идентификацию и т. Д. Большая часть зависимостей проекта от внешних ресурсов должна быть реализована в классах, определенных в проекте инфраструктуры. Эти классы должны реализовывать интерфейсы, определенные на прикладном уровне.

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

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

Комментарии:

1. Ставлю это как правильный ответ, потому что ты сразу пошел туда, куда я хотел, и я понял еще кое-что. Еще раз спасибо за помощь в прочтении того, что вы упомянули!