Son entidades que usamos para la transferencia de datos entre capas o niveles. Son entidades sin comportamiento, solo contenedoras de datos. Los escenarios mas usuales son los Servicios, Repositorios y Vistas.
Framework:
Para las aplicaciones creadas usando SharpArchitecture se implemento un helper en Noanet.Mvc.Core que nos facilita el llenado de datos de un Dto.
Ejemplo:
public class Person : Entity
{
public virtual string LastName { get; set; }
public virtual string FirstName { get; set; }
public virtual int Dni { get; set; }
public virtual string Address { get; set; }
public virtual State State { get; set; }
}
Si necesitamos un Dto para un manejo mas sencillo o para poder serializar de una manera directa creamos un Dto e implementamos la interfaz IDtoClass<T>
public class PersonDto : IDtoClass<Person>
{
public string Name{ get; set; }
public int Dni{ get; set; }
public string Address{ get; set; }
public string State { get; set; }
public string Country{ get; set; }
public void FillData(Person person)
{
this.Name = string.Format("{0}, {1}", person.LastName, person.FirstName);
this.Dni = person.Dni;
this.Address = person.Address;
this.State = person.State.Name; // Controlar en caso de que sea null
this.Country = person.State.Country.Name; // Controlar en caso de que sea null
}
}
Y ahora si podemos, usamos el helper para manejar una lista de clases y obtener una lista de dtos:
IList<PersonDto> peopleDto = Noanet.Mvc.Core.DtoClass.FillDto<PersonDto, Person>(people);
Esta lista de dto podria ser serializada directamente a JSon y manejada con javascript o colocando los correspondientes atributos se podría usar en Servicios WCF (en ese caso usar Noanet.Fwk.Common.IDtoClass, Noanet.Fwk.DtoClass.FillDto).
En MVC colocamos estas clases en los projectos Noanet.Product.Core (en caso de ser usada en repositorios) ó Noanet.Product.Web.Controllers (dentro de cada controlador en caso de ser usada como contenedor de datos para las vistas de este, unicamente).