martes, 6 de octubre de 2015

No olvidar jamás que MVC es un patrón de diseño

Buen@s (días|tardes|noches) a todos.
La idea del día de hoy es debatir un poco acerca de esto que hace mucho tiempo viene siendo una constante o un abuso de un patrón de diseño llamado MVC (Model-View-Controller) y de ahí todos sus derivados como MVVMMVMVMVMVM.....etc.  También destacar que el caso que escribo hoy aplica a un universo ASP.NET MVC pero que perfectamente puede aplicar a otro lenguaje.
A modo de resumir un poco el universo de ingenieros/desarrollares se me vienen dos tipos de personas a la cabeza:

  1. El sujeto que implementa o por lo menos alguna vez en su vida ha implementado el patrón MVC con un lenguaje de programación (cualquiera)
  2. El sujeto que utiliza un framework de desarrollo de software basado en MVC
A simple vista que conclusiones podríamos sacar de estos dos sujetos, veamos:
  1. El sujeto 1 tiene claro que está implementando un patrón de diseño ( se entiende que conoce lo que hace )
  2. El sujeto 2 tiene claro que está utilizando un framework que implementa un patrón de diseño por lo tanto su framework ofrece ciertas convenciones que soportan ese patrón.
  3. El sujeto 2 sabe que utiliza un framework de desarrollo que agiliza su manera de desarrollar y entiende que está dividido en modelo-vista-controlador y que su framework utiliza ciertas convenciones como por ejempo actions, routings, areas, bundles, etc, etc.. Sabe que es un patrón pero al parecer lo ha olvidado completamente...
Y es justo en este último caso que quiero detenerme ya que muchas veces me ha sucedido que en una charla del patrón Model-View-Controller la contraparte de la conversación está tan frameworkizada que al parecer ha olvidado que los elementos o convenciones que su framework utiliza para soportar una solución MVC no son parte del patrón como actions, routings, areas, bundles, etc  en sí. 

Para efectos de algún desarrollo en particular  esta descargo reflexión tal vez no tiene ninguna importancia. Lo que sí importa es que como Ingenieros nunca olviden cual es la raíz de lo que están implementando.

Saludos :-)

sábado, 5 de mayo de 2012

Envíar un JSON bien formado asincrónicamente al servidor sin morir en el intento (ASP.NET MVC + AJAX + JSON)

Bueno, desde que trabajo con ASP.NET MVC se me ha hecho más que recurrente postear un JSON en el servidor de manera asincrónica utilizando la función $.ajax de jQuery. El problema surge cuando se necesita realizar el binding de tu JSON con un objecto complejo creado en C# que puede tener muchos niveles de profundidad.

He visto en internet muchos artículos en donde cada vez que se necesita crear un objeto json lo hacen de esta manera:
var persona = {
nombre: 'Max',
edad: '24'
};
Lo cual es muy útil cuando tienes un objeto sencillo, pero ¿Qué pasa si necesitamos crear un JSON dinámicamente y a demás complejo de muchos niveles? las probabilidades de que el JSON quede mal formado son muy grandes y lo que tambien es muy probable es que pases mucho rato tratando de solucionar este problema. ¿La solución? ... Objetos y Clases en JavaScript :-) Para estos casos es muy conveniente utilizar clases y objetos en javascript, bueno comencemos con un ejemplo: Crearemos entonces algunas clases:
//Definimos nuestras clases.
function Persona(){
   this.Nombre = "";
   this.Apellido = "";  
   this.Edad = ""
   this.Mascotas = new Array();
}

function Mascota(){
   this.Nombre = "";
   this.Tipo = "";
   this.Edad = "";
}

//Creamos una persona 
var persona = new Persona();

persona.Nombre = "Max";
persona.Apellido = "Becerra";
persona.Edad = "24";

//Creamos nuestra primera Mascota
var perrito = new Mascota();

perrito.Nombre = "Pillín";
perrito.Tipo = "Perro";
perrito.Edad = "6";

//Creamos nuestra segunda Mascota

var gatito = new Mascota();

gatito.Nombre = "Tommy";
gatito.Tipo = "Gato";
gatito.Edad = "2";

//Ahora procederemos a asignarle las mascotas a nuestra persona

persona.Mascotas.push(perrito);
persona.Mascotas.push(gatito);

//Bueno el objeto que hemos creado no es tan complejo pero  
//al crearse dinámicamente puede adquirir muchos más niveles
//de los que les hemos dado acá.


A estas alturas debes estar preguntandote ¿Y el JSON?, bueno es aquí donde viene lo mejor, utilizaremos la función JSON.stringify de Javascript que permite pasarle cómo parametro un objeto JavaScript y serializarlo :
var json = JSON.stringify(persona);
Entonces nuestra variable json almacena un JSON pfectamente serializado y de esta manera nos evitamos tener errores de formato. Ahora lo que nos falta es enviarlo al servidor asincrónicamente utilizando AJAX:
$.ajax({
                type: "POST",
                url: url,
                data: json,
                contentType: 'application/json; charset=utf-8',
                success: function (datos) {
                    if (datos) {
                        alert("Funciona :-)");
                    }
                    else {
                        alert("No funciona :-(");
                    }
                }
            });
Es muy importante no olvidar agregar explicitamente el attributo: contentType: 'application/json; charset=utf-8' en la función AJAX ya que si no lo haces estarás enviando un JSON al servidor pero este jamás sabrá que lo que envías es un JSON y esto es esencial para que el controller de ASP.NET MVC pueda realizar el binding adecuado entre el JSON y tu objeto complejo. Hasta la próxima y Happy Coding! :-)

domingo, 8 de abril de 2012

Bienvenida

Hola a todos, bueno mi nombre es Maximiliano, soy Ingeniero en Computación e Informática, tengo 24 años y en este blog pretendo compartir con ustedes todas mis experiencias laborales relacionadas con la Ingeniería de Software en general por lo que estaré actualizando constantemente este espacio con el que pretendo compartir mi crecimiento profesional dentro del increíble mundo de los 0's y 1's . Nos vemos luego :-)