none
Clase model [Objecto para Transferir Datos vía Ajax] es correcto? RRS feed

  • Pregunta

  • public class JsonDTO
        {
            public bool ExitoAccion { get; set; }
            public int Total { get; set; }
            public string contraseniaGenerada { get; set; }
            public string HtmlContent { get; set; }
    
            public Configuration Configuration { get; set; }
            public Title Title { get; set; }
            public UsersAdmin UserAdmin { get; set; }
            public Company Company { get; set; }
            public User User { get; set; }
            public CompanyContacts CompanyContact { get; set; }
    
            public List<ParameterType> ListParameterType { get; set; }
            public List<Configuration> ListConfiguration { get; set; }
            public List<Title> ListTitle { get; set; }
            public List<UsersAdmin> ListUsersAdmin { get; set; }
        }
    Estoy desarrollando un proyecto en una empresa, y yo acostumbraba utilizar una clase como esta para guardar y enviar la data a mis llamados con Ajax, luego en la propiedad "success" extraigo la data.
    Esta clase yo la llamo model, pero mi superior me dijo que no me recomienda usarla, por x motivo.
    Ustedes que piensan al respecto.
    jueves, 8 de febrero de 2018 15:40

Todas las respuestas

  • Sí que es un "model". El problema es que en una aplicación típica tienes varios tipos de models y se puede causar confusión si a todos ellos les llamas "model". Por un lado está el modelo de entidades para la base de datos (típicamente construido con Entity Framework), y por otro el Modelo que se pasa del Controlador a la Vista (que en los ejemplos más sencillos coincide con el modelo de datos, pero en aplicaciones complejas son dos tipos de modelo distintos). Para evitar confusión, a veces al segundo de ellos se le llama "VistaModelo" (ViewModel) en lugar de "Modelo", para poderlos distinguir. Si ahora añadimos también otro modelo más para encapsular los datos que viajan del servidor al cliente, pues estamos agregando confusión entre los tipos de modelo. Es preferible buscarle otro nombre para que resulte más claro saber de qué estamos hablando cuando digamos "Model".
    jueves, 8 de febrero de 2018 18:22
  • Gracias por responder, si estoy de acuerdo sería preferible llamarla ViewModel, pero referente a si es una buena práctica, es adecuado usar esta clase para devolver data? Es decir me piden que devuelva el objeto con sus propiedas que solicite, pero aveces existen razones para crear una clase de este tipo para poder abarcar más data, como podria ser para llenado de graficos y listas de un solo llamado. Como podría refutar su uso?
    jueves, 8 de febrero de 2018 22:46
  • No, no estoy de acuerdo en que esa clase sea el ViewModel. El ViewModel se pasa del Controlador a la Vista, y por lo tanto no sale del servidor en ningún momento. La clase que tu indicas (para enviarla mediante AJAX) viaja del controlador al navegador (sin pasar por la vista), por lo que es muy distinta del VIewModel.

    Dicho esto, sí, es adecuada para pasar los datos que sean pertinentes a la página que se ejecuta en el navegador. Si la cuestión que planteas es si es conveniente una única clase grande que encapsule mucha información, o sería preferible muchas clases pequeñas, cada una de ellas especializada en un único dato, la respuesta es que depende de cómo esté organizada la página cliente. Si siempre va a hacer uso de todos los datos, es preferible pasarlos todos en una única llamada, para evitar múltiples viajes entre el navegador y el servidor, que incrementarían la latencia total. Pero si son datos que solo se van a necesitar en algunas ocasiones, cuando ocurra determinado evento en el lado cliente, es preferible separarlos y enviarlos solo si se necesitan, para minimizar el trasiego de datos y que la página cargue más rápido.

    jueves, 8 de febrero de 2018 23:01