sábado, 17 de marzo de 2012

Eventos - Tutorial 6


Crear Eventos Enrutados 

Bueno hola a todo el mundo después de mucho tiempo vuelvo a seguir con los eventos, espero algún día terminar jajaja, estoy muy vago pero bueno voy a tratar de escribir 1 articulo por semana ya que el laburo me tiene complicado tengo que terminar y me parece que me va a pasar algo a al 99% de los desarrolladores nos pasa no terminar a tiempo jajaja, me rio para no llorar, bueno me dejo de llorar y arrancamos con la creación de un evento, primero voy a pegar una imagen muy ilustrativa de la diferencia entre los eventos de tipo burbuja suben por el árbol y los de tipo túnel que bajan por el arbolito de elementos.



Ahora que nos acordamos de cómo funcionaban vamos a comenzar, …… a seguir repasando conceptos son necesarios, el modelo de estos eventos es muy similar a lo que son las propiedades de dependencia, ya vamos hablar de esto cuando termine con los eventos, si ya sé que tendría que haber arrancado con eso primero pero yo les digo que no porque nosotros arrancamos hablando de eventos básico los que usábamos en el querido WinForm y ahora tocamos los nuevos eventos que los podemos usar en WPF o Silverlight. 

Para el ejemplo vamos a ver la clase Button, y el evento Click:

public abstract class ButtonBase : ContentControl, ...
{
    //Aca definimos el evento – que es el conocido Click
    public static readonly RoutedEvent ClickEvent;

    //Registramos el eventos
    static ButtonBase()
    {
        ButtonBase.ClickEvent = EventManager.RegisterRoutedEvent(
          "Click", RoutingStrategy.Bubble,
          typeof(RoutedEventHandler), typeof(ButtonBase));
        ...
    }

    // Encapsulamos el evento
    public event RoutedEventHandler Click
    {
        add
        {
            base.AddHandler(ButtonBase.ClickEvent, value);
        }
        remove
        {
            base.RemoveHandler(ButtonBase.ClickEvent, value);
        }
    }
     ...
}

Para resumir de una manera muy básica son 3 pasos:
  • Definimos
  • Registramos
  • Encapsulamos

Como se los describo es facilísimo, aunque no sé si es tan fácil, pero para que se queden contentos les voy a decir que si, después cuando creen sus eventos seguramente se van acordar de mi, espero que de buena manera.

Un breve repaso, EventManager.RegisterRoutedEvent(….)

public static RoutedEvent RegisterRoutedEvent(
        stringname,
        RoutingStrategy routingStrategy,
        Type handlerType,
        Type ownerType
)

Esto es importante que lo sepamos como dijimos a la hora de registrar el evento le vamos a poner un nombre que puede ser lo que se les ocurra pero lo ideal es mantener una relación coherente no como normalmente hago yo que le pongo cualquier cosa, y después cuando dejo el proyecto por 2 semanas tengo que tomarme 4 meses para saber que carajo hice, no hagan como yo hagan las cosas bien muchas veces cuenta pero a la larga es mejor se los digo por experiencia propia.

El segundo parámetro es el tipo directo, túnel o burbuja, el tercero es el tipo del controlador del evento que por defecto es RoutedEventHandler, y el cuarto es la clase en donde esta definido el evento en el caso del ejemplo es ButtonBase.

Y el ultimo paso es encapsular, para despedirme voy a poner el ejemplo en el que le puse un nombre y al encapsulamiento otro distinto pero es un error menor aunque lo ideal es evitarlo.


        #region EVENTOS

        public static readonly RoutedEvent DatoChangedEvent = 
            EventManager.RegisterRoutedEvent( "Selected"RoutingStrategy.Bubble, 
                typeof(RoutedEventHandler), typeof(ArribaAbajo));


            public event RoutedEventHandler DatoChanged
            {
                add { AddHandler(DatoChangedEvent, value); }
                remove { RemoveHandler(DatoChangedEvent, value); }
            }

        #endregion

Ahí en mi ejemplo el paso 1 y 2 los hago juntos, y lo que les decía que eviten yo ahí nombre el evento como “Selected” y después lo encapsulo como DatoChanged, pero bueno son cosas que pasan.


Lo puedo lanzar de la siguiente manera:

arribaAbajoAñosRecidencia.DatoChanged += 
new RoutedEventHandler(arribaAbajoAñosRecidencia_DatoChanged);
            
void arribaAbajoAñosRecidencia_DatoChanged(object sender, RoutedEventArgs e)
{
   throw new NotImplementedException();
}

Y  podría dispáralo de la siguiente manera:

 //creo el evento
RoutedEventArgs args = new RoutedEventArgs(DatoChangedEvent); 
//disparo 
RaiseEvent(args);


Ahora si mis queridos lectores, me despido hasta la próxima creo que ya podemos decir que tenemos una idea general de todo, por el código de ejemplo no se asusten si no me entendieron en el próximo tutorial, el 7 que es donde voy a dar por finalizado el tema voy a crear un control de usuario o extender un control como por ejemplo un textbox y agregarle un evento y llamarlo, lanzarlo, matarlo……….., etc, igual siempre algo nuevo sale y cuando eso pase seguramente armare algún artículo como para llevar el actualizado el tema.

jueves, 1 de marzo de 2012

Entity Framework - Tutorial 1

Mapeo de Objeto-Relacional

Hola a todos los lectores, hoy voy a tocar uno de los temas más importantes en la actualidad, que es el mapeo de una base de datos, ya vamos a ir explicando que es todo esto de una manera bien fácil, para que nadie salga corriendo.

Digamos que en el 99% de los casos, por no decir en el 99,99%, cuando desarrollen una aplicación van a utilizar una base de datos, si tienen experiencia en algún lenguaje como por ejemplo visual basic, el leguaje con el que di mis primeros pasos, me puse nostálgico jajaja, pero bueno sigamos, saben que el tema de las consultas es un tema que complica y mucho, el panorama mejoro mucho con los queridos DataSet de .net, y particularmente me emociono con la salida de entity framework que es el ORM estrella de .NET, seguramente más de uno escucho o leyó algo sobre el, lo cierto es que no es el único hay muchos ORM, tanto en .NET, como en otros lenguajes, en JAVA unos de los orm mas conocidos es Hibernet, pero bueno sigo sin explicarles que es, no se pongan nerviosos ahora voy a empezarles a explicarles todo lo fundamental.

¿Qué es un ORM?

Es un componente de software que nos permite trabajar con los datos persistidos como si ellos fueran parte de una base de datos orientada a objetos , mas fácil como la mayoría de las bases de datos trabajan de forma relacional, y la metodología de desarrollo más populares son las orientadas a objetos, lo que hacen los programitas estos es transformar la base de datos relacional a una base de datos de objetos.

Entonces las hermosas siglas en Argentino significan Mapeo Objeto-Relacional, es decir que pasa una base de datos relacional a objetos, mas adelante vamos a ver que podemos crear la base de datos en el programa y convertirla en relacional, pero de eso vamos hablar en otro artículo.

Vamos a mirar un ejemplo, en la siguiente imagen tenemos una base de datos con 2 tablas, categoría y productos, la relación es 1 a muchos, es decir que en una categoría hay muchos productos.







En la siguiente imagen podemos ver la misma base de datos pero mapeada, ahora para que veamos algunas de las cosas interesantes que tiene el mapeo vamos a ver consultas en ambos escenarios.








Es prácticamente igual la diferencia es que en la base de datos mapeada podemos hacer uso de todos los conceptos que tenemos en la programación orientada a objetos.


No me quiero adelantar mas en el próximo tutorial vamos a ver cómo crear el mapeo haciendo uso de Entity Framework, para después poder ver LINQ to Entities que es la manera más fácil de de hacer consultar sobre el modelo, me despido hasta el próximo articulo un saludo a todos.

Access