Ссылка ApplicationUser в библиотеке инфраструктуры на сущность в библиотеке ApplicationCore с использованием чистой архитектуры - PullRequest
0 голосов
/ 07 декабря 2018

Я следую Руководству по архитектуре Microsoft для создания основного веб-приложения ASP.NET.

В руководстве реализован шаблон чистой архитектуры, который довольно прост.

Если вы посмотрите на пример проекта, который использует шаблон чистой архитектуры, вы увидите, что есть папка Infrastructure / Identity , которая содержит класс ApplicationUser.cs.

Myпроблема:
Я использую Entity Framework, и одна из моих бизнес-сущностей в библиотеке классов ApplicationCore должна содержать список ApplicationUser.Библиотека ApplicationCore не должна ссылаться ни на какие другие проекты.Он содержит все интерфейсы и бизнес-объекты.Как я могу сохранить класс ApplicationUser в своем проекте Infrastructure / Identity и по-прежнему использовать его в одном из моих бизнес-объектов в проекте ApplicationCore, не нарушая правил.

Я знаю, что одним из решений является не хранить объект ApplicationUser вмой инфраструктурный проект.Тем не менее, я чувствую, что он должен быть там, поскольку он всегда будет полагаться на Identity, поскольку он реализует IdentityUser.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Пользователь - это объект, и он должен находиться на уровне Core.

Но вы не должны использовать ApplicationUser : IdentityUser на уровне ядра, потому что он связан с удостоверением ASP.NET.Уровень Core не должен знать, какие технологии собираются реализовать домен.

Что если завтра вы захотите использовать другую библиотеку для управления пользователями?Это не касается уровня Core.

То, что вы можете сделать, это использовать интерфейс или базовый класс User в уровне Core и позволить уровню инфраструктуры беспокоиться о выборе библиотеки.

0 голосов
/ 07 декабря 2018

В чистой архитектуре:

Типы ядра приложения

• Сущности (классы бизнес-моделей, которые сохраняются) и агрегаты

• Интерфейсы

• Сервисы

• DTO

• Технические характеристики

• Исключения

Типы инфраструктуры

• Типы ядра EF (DbContext, Migrations)

• Типы реализации доступа к данным (репозитории)

• Сервисы, специфичные для инфраструктуры (FileLogger, SmtpNotifier и т. Д.)

Таким образом, ApplicationUser.cs - это объект, он должен находиться в Applicationядро

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...