martes, 15 de noviembre de 2011

Una guía a prueba de bobos para MVC Part Deux

Jóvenes. ¿Leyeron el anterior? BIEN HECHO.
Vamos al código.
En nuestra carpeta de Modelos, hacemos click con el botón derecho y del menú contextual elegimos "Agregar" y luego la última opción "Clase", like this:
¡Qué bonito!... En el cuadro de diálogo de la clase, cambiamos solamente el nombre, que será "Alumno", porque vamos a hacer un pequeño sitio para inscribirse a cursos.
Listo. Una vez que tenemos la clase nueva agregada, vamos a definir nuestro modelo. Para definir a un alumno, tenemos que agregarle sus propiedades. Por ejemplo, queremos que tenga Nombre y Apellido, DNI, Fecha de Nacimiento y queremos saber cómo escuchó de los cursos.
Entonces, agregamos las propiedades desde el código. Para agregar una propiedad en una clase, la forma más efectiva es escribir prop y dar dos veces tab. Prueben y me cuentan.
La clase quedará entonces así:
Vamos a analizar un poquito qué es lo que escribimos.
La propiedad ID, va a ser nuestro identificador unívoco de las instancias de la clase.
Las propiedades Name, LastName, DNI y Birthday no tienen mayores dificultades, pero los dos últimos renglones pueden parecer un poco "raros".
La idea es que el usuario no pueda escribir dónde oyó del curso, sino que seleccione de entre las opciones que le ofrece la página, para normalizar un poco las respuestas.
Entonces, para ello vamos a crear una segunda clase que se va a llamar "Reference", y vamos a relacionarla con nuestra clase Alumno con dos líneas de código: la primera va a tener una propiedad int que va a ser el ID de la referencia, y luego voy a declarar una clase "virtual" (después veremos qué es y para qué sirve) donde lo referencio a la nueva clase (que no está creada, por eso me sale el tipo subrayado) que se va a llamar Reference. Le puedo poner, si quieren, Rapunzel, en lugar de Reference, pero me pareció un nombre simpático.
BIEN. Hagan click sobre la palabra subrayada, y presionen Ctrl y punto. (Me refiero a la tecla ctrl y a la tecla del signo de puntuación punto) y les va a aparecer un menú contextual. Elijan "Agregar Clase para Reference"

Y automáticamente se agregará una nueva clase para "Reference", con la definición del namespace, etc.
Tenemos que modificar el scope de la clase, ya que por defecto no lo tiene declarado, y le agregamos dos campos: Uno de identificación (ID) y otro que, a falta de mejor nombre, le vamos a poner "Name"
La clase quedará entonces así:

Aunque parezca increíble, ¡ya casi tenemos TODO EL CÓDIGO QUE NECESITAMOS!
Vamos entonces a crear el controlador y las vistas para administrar los datos de estos modelos.
Primero compilamos la aplicación, para que el runtime sepa que tenemos nuevos modelos. Esto lo podemos hacer haciendo click derecho sobre el proyecto y elegir "Build" o haciendo Ctrl + Shift + "B".
Bien, vamos a la carpeta controladores y hacemos clique con el botón derecho en la carpeta controladores y seleccionamos "Agregar" y "Controlador, así:
Nos aparece el siguiente cuadro de Diálogo:

En el nombre del controlador vamos a poner "Alumno" en lugar de Default1 y vamos a dejar la palabra Controller, ya que esta es una convención del framework MVC. Nos quedará entonces en "AlumnoController".
En Template vamos a dejar lo que está seleccionado, esto es "Controller With Read/Write Actions and views, using Entity Framework".
En "Model Class" vamos a seleccionar la clase "Alumno" que es la que necesitamos para representar, y en "Data Context Class" vamos a seleccionar "New Data Context". Cuando hagamos esto, nos saldrá un nuevo cuadro de diálogo con el nombre de la contexto de datos. Dejemos el que nos propone, y además copiémoslo porque lo vamos a necesitar en pocos segundos.
Presionamos el botón "Add" (agregar) y listo el pollo y campiona la gallina.
Ahora, hacemos LO MISMO, de agregar controlador, pero en el nombre vamos a poner "ReferenceController", va a responder al modelo "Reference" y vamos a usar el mismo datacontext que ya creamos.
¿Qué es lo que hicimos ? En forma automática, agregamos las clases necesarias para manejar el enlace a datos, el controlador para la interacción con el usuario y las vistas que el usuario va a ver. Esto lo podríamos haber hecho en forma manual, pero ¿Para que tipear algo que la máquina puede hacer por mi?
No se preocupen por las clases y el código generado, ya lo vamos a ver en la próxima clase.
Por ahora vamos a ir cerrando lo que nuestra aplicación necesita para funcionar.
¿Se acuerdan del archivo "Web Config"? Bueno. Lo abrimos, y en donde dice "ConnectionString" reemplazamos el nombre de "ApplicationServices" de la primer entrada por el nombre del data context que acabamos de crear (y de copiar, si siguieron las instrucciones al pie de la letra).
¿Listo? Buenísimo
Ahora vamos a hacer dos cosas más.
Abrimos el archivo global.asax y en el método RegisterRoutes vamos a cambiar la palabra "Home" por la palabra "Alumno" ¿Qué efecto hace esto? que si yo no especifico una ruta para acceder a un controlador, la aplicación va a ir directamente al controlador "Alumno" y a la Acción "Index".
La instrucción quedaría entonces, Masomeno Sasí:


            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Alumno", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
Y una más y no jodemos más.
Vamos a la carpeta "Views", abrimos la carpeta "Shared" y modificamos en la vista "_Layout", que es la que tiene la definición de todas las vistas, en la sección nav vamos a cambiar los "ActionLinks" para que apunten a las acciones de nuestros nuevos controladores.
Está así:
Y quedará asá:
Listo, jovencitos, todo lo que necesitábamos para la aplicación está escrito.
Compilemos y corramos la aplicación, presionando F5 ¿Verdad que está bonito?
Ingresen al vínculo en la parte superior que dice "Referencias", presionen el vínculo "Agregar Nuevo" y agreguen 2 o 3 causas, como "Página Web" "Publicidad en el Diario", etc.
Luego presionen el vínculo de "Alumnos" y prueben de agregar alumnos a la BBDD.

¿Que tal, pascual?

¡Mañana Seguimos siguiendo!

No hay comentarios:

Publicar un comentario