Использование DTO для передачи данных между уровнем сервиса и уровнем UI

Я пытался выяснить это в течение нескольких дней, но, похоже, очень мало информации по этому конкретному вопросу с ASP.NET MVC. Я гуглил в течение нескольких дней и не смог ничего выяснить по этому конкретному вопросу.

У меня есть трехслойный проект. Бизнес, DAL и пользовательский интерфейс / веб-слой. В DAL есть dbcontext, репозиторий и единица работы. На бизнес-уровне находится доменный уровень со всеми интерфейсами и моделями EF. На бизнес-уровне также существует сервисный уровень с DTO для моделей EF и универсальная служба репозитория, которая обращается к репозиторию.Этот картина должна помочь объяснить это.

Моя проблема в том, что я просто не могу понять, как использовать DTO для передачи данных с бизнес-уровня.

Я создал классы обслуживания для DTO. У меня есть ImageDTO и модель, и то же самое для якорей изображения. Я создал класс обслуживания для каждого DTO. Так что у меня есть сервис изображений и якорный сервис. Эти сервисы наследуют сервис репозитория и в настоящий момент реализуют свои сервисы. Но это примерно, насколько я получил. Поскольку у этих сервисов есть конструкторы, которые получают интерфейс IUnitOfWork через IoC, я в значительной степени застрял.

Если я обращаюсь к сервису напрямую из пользовательского интерфейса, все работает как надо, но я просто не могу понять, как использовать DTO для передачи данных как с сервисного уровня на уровень пользовательского интерфейса, так и наоборот.

Мой уровень обслуживания:

Бизнес / Услуги / DTOS

public class AnchorDto
{
      public int Id { get; set; }
      public int x1 { get; set; }
      public int y1 { get; set; }
      public int x2 { get; set; }
      public int y2 { get; set; }
      public string description { get; set; }
      public int  imageId { get; set; }
      public int targetImageId { get; set; }

      public AnchorDto(int Id, int x1, int y1, int x2, int y2, string description, int imageId, int targetImageId)
      {
          // Just mapping input to the DTO 
      }
}

public class ImageDto
{
    public int Id { get; set; }
    public string name { get; set; }
    public string title { get; set; }
    public string description { get; set; }
    public virtual IList<AnchorDto> anchors { get; set; }

    public ImageDto(int Id, string name, string title, string description, IList<AnchorDto> anchors )
    {
        // Just mapping input to DTO
    }
}

Бизнес / Услуги / Услуги

public class RepoService<TEntity> : IRepoService<TEntity> where TEntity : class
{
    private IRepository<TEntity> repo;

    public RepoService(IUnitOfWork repo)
    {
        this.repo = repo.GetRepository<TEntity>();
    }

    public IEnumerable<TEntity> Get(
        Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
        string includeProperties = "")
        {
            return repo.Get(filter, orderBy, includeProperties);
        }

        public TEntity GetByID(object id)
        {
            return repo.GetByID(id);
        }

        public void Insert(TEntity entity)
        {
            repo.Insert(entity);
        }

        public void Delete(object id)
        {
            repo.Delete(id);
        }

        public void Delete(TEntity entityToDelete)
        {
            repo.Delete(entityToDelete);
        }

        public void Update(TEntity entityToUpdate)
        {
            repo.Update(entityToUpdate);
        }
    }

Сервис Image, интерфейс IImageService в настоящее время пуст, пока я не выясню, что мне нужно реализовать.

public class ImageService : RepoService<ImageModel>, IImageService
{
    public ImageService(IUnitOfWork repo)
        : base(repo)
    {

    }
}

На данный момент мои контроллеры не работают и не используют уровень обслуживания, поэтому я решил не включать ни один из них. Я планирую сопоставить DTO с ViewModels с помощью автоматического сопоставления, как только я разберусь с этой проблемой.

Так что теперь, пожалуйста, кто-нибудь достаточно знающий, чтобы дать мне ту идею, которую я скучаю, чтобы я мог понять это?

Ответы на вопрос(1)

Ваш ответ на вопрос