Ir al contenido principal

Model View Presenter en ASP.NET WebForms

En la reunión 37 de la comunidad Tijuana Net, realizada el pasado 29 de Septiembre en la Universidad Autónoma de Baja California. Hablé sobre el patrón MVP (Model View Presenter) en aplicaciones escritas usando ASP.NET WebForms.

Actualmente considero una mejor alternativa utilizar el framework ASP.NET MVC sobre WebForms sin embargo, por diversos motivos, muchos de nosotros aun tenemos que trabajar en aplicaciones escritas con WebForms. Es por ello que me pareció buena idea presentar como aplicar este patrón y así quienes aun trabajamos en WebForms podamos obtener algunas de las ventajas de separación de intereses y capacidad de pruebas que brinda MVC.

En la presentación inicie una aplicación WebForms de manera “tradicional” después la modifiqué para poder aplicar el patrón MVP y así tener la posibilidad de realizar pruebas unitarias al código que antes estaba en el code behind. En la segunda parte de la presentación modifiqué una vez mas el código de la aplicación para poder tener una estructura de clases reutilizable, además de utilizar un contenedor de dependencias.

Abajo pueden ver la presentación y el material que se utilizó. Agradezco sus comentarios que puedan ayudar a mejorar siguientes presentaciones. De igual forma si tienen alguna duda sobre la presentación no duden en hacérmela llegar a través de los comentarios del blog.

Agradezco también a todos los asistentes su presencia y participación durante la reunión. Y claro a la comunidad Tijuana Net y a su líder Gabriel Flores por hacer posible estas reuniones.

Screencast

Fotos

Proyecto de ejemplo



Reuniones previas mencionadas (para ver los screencasts):
Test Driven Development
IoC containers

Comentarios

  1. Amigo, vi tu codigo y vi que la vista invocas al presentador cuando debe de ser al reves. Recuerda el presentador es el que le dice a la vista que debe de hacer y no al reves. Te recomiendo le echez un vistazo al patrón Passive View.
    En este patron la vista no sabe nada del modelo, por lo que no le pasas una entidad de negocio sino algo mas abstracto un IEnumerable para colecciones y inyectas desde el presentador los valos del modelo a propiedades de la vista que son en el control de usario webcontrols.

    Saludos,

    Manolo Herrera

    ResponderBorrar
  2. Gracias Manolo, le echare un vistazo a Passive View.

    ResponderBorrar
  3. Hola Mario, estoy interesado en el tema de MVP quisiera pedirte si por favor me puedes explicar como empezar un proyecto con MVP desde el principio.

    Saludos.

    ResponderBorrar
  4. Hola Mauricio, en el vídeo empiezo un proyecto desde el principio.

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Bloqueos

Una de las preguntas típicas de las juntas matutinas en los equipos de desarrollo de software es ¿Hay algún bloqueo? Si lo hay, se trata de ver qué es lo que está esperando esa persona y encontrar la forma de que se desbloquee; pero ¿Qué son los bloqueos? Los bloqueos son obstáculos que te impiden realizar o avanzar en tu trabajo. Evitan que puedas seguir progresando en el proyecto.

He notado que es común en las personas con menos experiencia decir que tienen un bloqueo cuando están batallando, debido a su poca experiencia, en la forma de resolver un problema. Han intentado varias formas y se empiezan a quedar sin ideas de como puede ser resuelto el problema o como pueden cumplir con el requerimiento especificado. Al quedarse sin opciones de qué intentar dicen que tienen un bloqueo con la tarea y que a menos que alguien les diga como resolverlo, no se puede avanzar en la tarea.

En personas con más experiencia, ese tipo de bloqueos no ocurren, una persona con experiencia ha visto pro…

Firebird 2.1 UPDATE OR INSERT

Another great feature that I like in Firebird 2.1 is the UPDATE OR INSERT statement. It's a really time saver and it makes the SQL cleaner.

For example suppose I have a products table like the one I use in my last post and an inventory table to store the product stock. Before Firebird 2.1 if I want to set the stock for a product I needed to check if a record for that product_id already exists; if the product_id already exists then I write an update. If not then I write an insert statement. So I ended up with something like this:


IF EXISTS(SELECT * FROM inventory WHERE product_id = :product_id ) THEN
UPDATE
inventory
SET
stock = :stock
WHERE
product_id = :product_id;
ELSE
INSERT INTO inventory
(product_id, stock)
VALUES
(:product_id, :stock);

In this example I only update one field but when I have to update a big table I ended up with a big chunk of code and thinking: "there should be another (better) way to do this".

Fortunately now with Firebird 2.1 there…

Database Mail en MS SQL Server 2005

Configuración de Database Mail en MS SQL Server 2005

Primero se debe de habilitar, ya que por omisión el componente esta deshabilitado, Utilizando el SSMS (SQL Server Management Studio)


Si no esta habilitado aparecerá un mensaje preguntado si lo habilita, después aparece esta ventana donde se pregunta al usuario que es lo desea hacer.


Seleccionamos la primera opción para crear un perfil.


Configuramos el perfil y le agregamos por lo menos una cuenta.


Seleccionamos el perfil como public y default.


Para mandar correo se utiliza el procedimiento msdb.sp_send_dbmail por lo tanto el usuario que intente mandar correo debe de tener permiso para la base de datos msdb.

Referencias:
http://www.sqlservercentral.com/columnists/cBunch/introtodatabasemailinsql2005.asp