Где и как отобразить T-сущность на несколько разных сущностей? - PullRequest
1 голос
/ 07 марта 2019

Этот пост содержит два разных, но взаимосвязанных вопроса:

Я создаю приложение с многоуровневой архитектурой. Я решил перенести несколько типов объектов между слоями, см. Архитектуру изображения 1.

Основная причина использования различных объектов - это дополнительная безопасность, безопасность по конструкции. Таким образом, объекты Dto являются объектами из базы данных, где данные фильтруются (например: hashed userId's)
Architecture Изображение 1. Архитектура

На картинке я перевожу Dto с уровня данных на бизнес, причина: разработчики бизнеса не могут неправильно использовать объекты и отправлять вредные данные базы данных.

Вопрос 1: Где я должен отобразить объекты?

Я еще не уверен, куда конвертировать объекты, сейчас я думаю сделать это в классе Repository. Я прочитал (см. Ссылку 1), что репозиторий не предназначен для этого, но у меня нет четкого объяснения этому при использовании передачи данных, как я делаю в этой архитектуре. Ссылка 1: Злоупотребление объектами сопоставления шаблонов репозитория.

Я не использую Automapper для этого, потому что не так много объектов для отображения и сохранения контроля над кодом. Я также читал, что Automapper имеет некоторые сложности, если вы хотите увидеть их, см. Ссылку 2. Ссылка 2: Ужасы Automapper.

Вопрос 2: Как я могу по-прежнему использовать общий класс и объекты карты по типу?

Например:

Общий репозиторий

public abstract class Repository<T> : IRepository<T> where T : class
{
   private readonly PlatformContext _platformContext;

   protected Repository(PlatformContext context) => _platformContext = context;
}

Специальный репозиторий

public class RoomRepository : Repository<Room>, IRoomRepository
{
   private readonly PlatformContext _platformContext;

   public RoomRepository(PlatformContext platformContext)
       : base(platformContext) => _platformContext = platformContext;
}

Я могу переопределить все общие методы, но у меня есть ощущение избыточности с этой опцией. Любой, кто знаком с способом создания конфигурации отображений и возврата определенной сущности по возвращаемому значению метода.

Более простой пример вопроса: RoomRepository наследует функцию Repository:

bool Create(T entity);

Где в этом случае T объект Room, есть ли способ выбора в соответствии с параметром в функции?

Или, может быть, у кого-то есть более простой способ, что я думаю слишком сложно.

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