Pregunta

Tengo un proyecto en donde utilizamos la pantalla de DTO para encapsular los datos entre el Capa De Servicio y el Capa De Presentación.En nuestro caso, la capa de presentación es ASP.Net.

La única clase que saber sobre el DTO son la capa de servicio de las clases y las Páginas/Controles que llamar a estos servicios y mostrar el DTO del.

El DTO es casi siempre son Página/Control específicas, por lo que siento que pertenecen a la Capa de Presentación, pero que significaría la Capa de Servicio tendría que hacer referencia a la Capa de Presentación con el fin de utilizar el DTO del.

Yo casi estoy pensando que la Capa de Servicio debe devolver más ricos objetos (pero no de dominio de las entidades?) y, a continuación, la Capa de Presentación puede tomar estos objetos y asignarlos a DTO muy específico para cada Página/Control de preocupación.

He aquí una declaración de interfaz y un DTO para que pueda ver lo que estoy hablando:

public interface IBlogTasks
{
    BlogPostDisplayDTO GetBlogEntryByTitleAndDate(int year, int month, string urlFriendlyTitle);
}

public class BlogPostDisplayDTO 
{
    public string Title { get; set; }
    public DateTime PostDate { get; set; }
    public string HtmlContent { get; set; }
    public string ImageUrl { get; set; }        
    public string Author { get; set; }
    public int CommentCount { get; set; }
    public string Permalink { get; set; }
}   

Editar

He aquí otro ejemplo de código para describir un caso de uso en el modelo de Dominio no está involucrado.Tal vez esto va a aclarar un poco las cosas.Creo que me ha sobrecargado el DTO significado.Yo no estoy hablando de un DTO para la función de transferencia de un objeto sobre el cable.Estoy creando DTOs para formalizar los contratos entre la comunicación a mi Capa de Servicio.

public interface IAuthenticationTasks
{
    bool AuthenticateUser(AuthenticationFormDTO authDTO);
}

public class AuthenticationFormDTO
{
    public string UserName { get; set; }
    public string Password { get; set; }
    public bool persistLogin { get; set; }
}

Digamos que mi autenticación de repente requiere un parámetro de dirección IP.Ahora puedo agregar que la propiedad del DTO sin tener que cambiar mi contrato de la interfaz.

No quiero pasar Entidades a mi Capa de Presentación.No quiero que mi código detrás de tener la capacidad de ir BlogPost.AddComment(new Comment())

¿Fue útil?

Solución

Incluso el pensamiento de la canónica de caso de uso para el " DTO " es más "serializable objeto que se puede pasar a través de la red", en este caso de que realmente se están refiriendo más a la presentación de la transferencia de objetos' o 'ver los modelos'.

Normalmente para nuestros proyectos de la respuesta a donde estas en vivo es donde la 'traducción' de código es que los mapas de la DDD modelo de dominio para la toma de fuerza de las clases.Si eso es en la Prensenation capa (tal vez no tan grande de una respuesta) a continuación, el pres.la capa es donde me gustaría declarar que las oficinas de marcas.Pero más a menudo que no, el "Servicio" que hace la traducción para usted, lo que significa que tanto el 'Servicio' y la 'Presentación' de la capa de necesidad referencias a las oficinas de marcas y que (generalmente) conduce a su declaración en una independiente, neutral proyecto/asamblea/espacio de nombres/lo que sea que TANTO la capa de presentación Y la capa de servicios se puede hacer referencia.

Otros consejos

Estás en la utilización real de los servicios (web o WCF)?Si es así, a continuación, definir las organizaciones del narcotráfico en la capa de servicio y el proxy crea al agregar un servicio (o web si usando los viejos ASMX) de referencia contendrá todo el DTO tipos.Esta es la manera más sencilla de hacerlo y sólo mantiene un acoplamiento flexible entre su ASP.NET proyecto y su proyecto de servicio -- no directos del proyecto de referencia se requiere en cualquier dirección.Como actualizar sus DTOs, todo lo que usted necesita hacer es actualizar su servicio de referencia y automáticamente se exponen las actualizaciones para su proyecto web a través de la clase de proxy generado.

En cualquier caso, si estás siguiendo algo así como una DDD enfoque es mejor tener sus proyectos de infraestructura (como una web específica de la plataforma de interfaz de usuario) que hacen referencia a su dominio de los objetos que viceversa.Si usted sigue mi consejo anterior, sin embargo, su proyecto web no tienen una dependencia directa con el proyecto, lo cual es una buena cosa, y sin duda mejor que tener tu dominio rico en objetos dependiendo de su proyecto web (si es que eran incluso una consideración - me doy cuenta de que no estaban diciendo que estaban haciendo).

Si su DTOs son específicos de la vista, entonces habría que incluir en la interfaz de usuario del proyecto.Realmente debe ser el controlador del trabajo, para asegurarse de que la Vista sólo se obtiene a partir del Modelo de lo que necesita - en su caso un valor de objeto con sólo los campos necesarios por la vista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top