Mappatura di oggetti Data Transfer sulla mia classe del modello

-1
//This represents my rows in my database
public class PersonModel
{
    public int Id{get;set;}
    public string FirstName{get;set;}
    public string LastName{get;set;}
    public DateTime CreatedBy{get;set;}

}


//This is what the client receives
public class PersonDto
{
    public int Id{get;set;}
    public string FirstName { get; set; }
    public string LastName { get; set; }    
}

//I have this DTO for other Views that 
//I only need to show FirstName

public class PersonFirstNameOnlyDto
{
    public int Id {get;set;}
    public string FirstName{get;set;}   
}

public class Person
{
    IPerson person;
    public Person(IPerson person)
    {
        this.person=person;
    }
    public void SavePerson(PersonDto person)
    {
        this.person.SavePerson(person); 
    }
}


public interface IPerson
{
     void SavePerson(PersonDto person);
}

Quando si salva una persona, ho bisogno di passare in PersonDTO al metodo SavePerson ma come se volessi passare PersonFirstNameOnlyDto ?. Quello che ho in mente è di convertire PersonFirstNameOnlyDto in PersonDto (posso usare AutoMapper qui) o aggiungere un altro metodo alla classe Person che accetta PersonFirstNameOnlyDto. Sto solo pensando se c'è un modo migliore per farlo, magari usando Generics ma davvero non so come posso ottenerlo.

Saluti

    
posta Denden 29.10.2018 - 08:10
fonte

1 risposta

0

Suggerirei che la creazione di tutti questi DTO porti a: 1. Codice extra da comprendere in quanto esistono più classi per la stessa cosa, ad esempio una persona, 2. La necessità di qualcosa come Dapper per gestire la conversione tra tutte queste classi, 3. Problemi come quelli che descrivi in diverse parti del sistema richiedono diverse versioni di una persona e legare tutto insieme possono essere diverse.

Quindi prenderei un altro approccio. Basta avere una classe, PersonModel che viene salvata e caricata dal database. Quindi utilizza le interfacce per esporre solo le parti di quella classe alle viste, ad esempio:

public interface IPersonFirstNameOnlyDto
{
    public int Id {get;set;}
    public string FirstName{get;set;}   
}

public interface IPersonDto
{
    public int Id{get;set;}
    public string FirstName { get; set; }
    public string LastName { get; set; }    
}

public class PersonModel : IPersonFirstNameOnlyDto, IPersonDto
{
    public int Id{get;set;}
    public string FirstName{get;set;}
    public string LastName{get;set;}
    public DateTime CreatedBy{get;set;}
}

Quindi quelle viste che hanno bisogno solo del primo nome si riferiscono solo a IPersonFirstNameOnlyDto etc, quindi hanno solo le proprietà che devono essere esposte a loro.

    
risposta data 29.10.2018 - 12:15
fonte

Leggi altre domande sui tag