Mit DTO zur übertragung von Daten zwischen service layer und UI-Schicht

Ich habe versucht, dies herauszufinden, für Tage, aber es scheint sehr wenig Informationen zu diesem bestimmten Thema mit ASP.NET MVC. Ich habe schon Googeln, um für Tage und noch nicht wirklich in der Lage, Figur etwas mehr über dieses Thema.

Habe ich einen 3-Schicht-Projekt. Business, DAL und UI/Web-Schicht. In der DAL ist dbcontext, repository und unit of work. In der business-Schicht ist eine domain layer mit allen Schnittstellen und die EF-Modelle. In der business-Schicht, dort ist auch eine service-Schicht mit DTOs für die EF-Modelle und eine generische repository-Dienst für den Zugriff auf das repository. Diese Bild sollte helfen, es zu erklären.

Mein problem ist, ich kann einfach nicht scheinen, um herauszufinden, wie man die DTOs übertragen Sie Daten aus der business-Schicht.

Habe ich erstellt-service-Klassen für die DTOs. Ich habe eine ImageDTO und Modell und dasselbe gilt für Bild-Anker. Ich habe eine service-Klasse für jedes DTO. Also ich habe da ein image-service-und anchor-service. Diese Dienste übernehmen die repository-service und im moment der Umsetzung Ihrer eigenen Leistungen. Aber das ist ungefähr so weit wie ich bekommen haben. Denn diese Dienste haben Konstruktoren, die einen IUnitOfWork-Schnittstelle über IoC habe ich ziemlich viel abbekommen gestrandet.

Wenn ich mich auf den service direkt aus der Benutzeroberfläche funktioniert alles wie es soll aber ich kann einfach nicht meinen Verstand um, wie die Verwendung von DTOs zur übertragung von Daten sowohl von der service-Schicht auf der UI-Ebene und Umgekehrt.

Mein service-layer:

Business/Services/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
    }
}

Business/Services/Services

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);
        }
    }

Den Image-Service, der IImageService-Schnittstelle ist zur Zeit leer, bis ich herausfinden, was ich implementieren muss.

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

    }
}

Im moment mein Controller nicht wirklich arbeiten und nicht mit den service-layer, so dass ich beschlossen, nicht zu einem von denen. Ich Plane, die Karte von DTOs auf ViewModels mit auto-mapper habe ich einmal sortiert das Problem aus.

So, jetzt bitte jemand kompetent genug, um mir diese Idee fehlt mir, so kann ich dies herausfinden?

InformationsquelleAutor grimurd | 2013-05-31

Schreibe einen Kommentar