ITERATOR

| 0 comentarios |
ITERATOR 


Diagrama UML



En diseño de software, el patrón de diseño Iterador, define una interfaz que declara los métodos necesarios para acceder secuencialmente a un grupo de objetos de una colección. Algunos de los métodos que podemos definir en la interfaz Iterador son:
Primero(), Siguiente(), HayMas() y ElementoActual()
Este patrón de diseño permite recorrer una estructura de datos sin que sea necesario conocer la estructura interna de la misma.


Un objeto agregado, tal como una lista, debería proveer un modo de brindar acceso a sus elementos sin exponer su estructura interna. Más aún, quizás se desea recorrer la lista en diferentes formas, dependiendo de lo que Ud. quiera realizar. Pero, probablemente, la idea no es aumentar la interfaz de la lista con operaciones para recorridos diferentes, aún anticipando los que se necesitarán. Tal vez, también se necesite tener más de un recorrido en la misma lista.

El patrón Iterator permite llenar todas estas espectativas. La idea principal en este patrón es tomar la responsabilidad del acceso y recorrido de la lista y colocarla dentro del objeto iterator. La clase Iterator define una interfaz para el acceso de los elementos de la lista. Un objeto iterador es responsable de mantener la pista del elemento actual; esto es, sabe cuáles elementos ya han sido recorridos.

Separar el mecanismo de recorrido del objeto List nos permite definir iteradores para diferentes políticas de recorrido sin tener que enumerarlas en la interfaz de List. Por ejemplo, FilteringListIterator puede proveer acceso solo a aquellos elementos que cumplan una política de filtro específica.

Note que el iterador y la lista están acoplados, y el cliente debe saber que es una lista lo que se está recorriendo, en lugar de algún otra estructura agregada. De ahí que el cliente comprometa una estructura agregada particular. Sería mejor si pudiésemos cambiar la clase agregada sin cambiar el código cliente. Esto lo logramos generalizando el concepto de iterador para soportar iteración polimorfa.

Definimos una clase AbstractList que provea una interfaz común para manipular listas. De igual forma, necesitamos una clase abstracta Iterator que defina una interfaz de iteración común. Luego podemos definir subclasses iteradoras concretas para las diferentes implementaciones de la lista. Como resultado, el mecanismo de iteración llega a ser independiente de las clases agregadas concretas.

El problema restante radica en cómo crear el iterador. Ya que lo que queremos es escribir código independiente de las subclasses concretas de List, no podemos simplemente instanciar una clase específica. En su lugar, hacemos a los objetos de la lista responsables por la creación de su iterador correspondiente. Esto requiere una operación tal como CreateIterator, por medio de la cual los clientes solicitan un objeto iterador.

Aqui encontran ejemplos de iterator

En este Link podran encontrar un ejemplo muy practico enfocado a filtrar grillas por medio de un BindingSource (el ejemplo usa la base de datos AdventureWorks) utilizando el patron de diseño Iterator, echo por Emerson Perdomo Ballén, que lo disfruten.

Entity Framework con PostgreSQL

| 8 comentarios |



PostgreSQL

Npgsql - .Net Data Provider for Postgresql son unas DLL que se agregan a Visual Studio .Net pero no se integra con el Wizard del Visual Studio .Net porque no hay soporte oficial de Npgsql, por otra parte uno las puede agregar en cada uno de los proyecto sin ningún problema, el inconveniente es que al intentar usarlas hay que generar el modelo desde "Visual Studio 2008 Command Prompt" e incluir los dos archivos ".cs" que genera al proyecto.
A Continuación doy los pasos para poder usarlo en un ejemplo sencillo.

PASO 1:

Descargue de la página oficial de Npgsql
El que dice:
Npgsql2.0.8-bin-ms.net3.5sp1.zip












Descargue la Última versión de PostgreSQL

Obviamente hay que tener

Visual Studio 2008 Professional Edition Trial con SP1

.Net Framework 3.5

PASO 2:

Instalamos el PostgreSQL , el Visual Studio, .NET Framework 3.5 y descomprimimos el Npgsql2.0.8-bin-ms.net3.5sp1.zip recomiendo que lo descompriman en C:\ para que no estén buscando la ubicación.

Ahora vamos a registrar nuestras DLL de Npgsql en el GAC de Visual Studio.
Primero hay que abrir nuestro "Visual Studio 2008 Command Prompt" que se encuentra por lo general en "Inicio -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt "

Hay ejecutamos las siguientes líneas de código:

gacutil -i c:\ubicacion de la dll Npgsql\Npgsql.dll
gacutil -i c:\ubicacion de la dll Mono.Security\ Mono.Security.dll

En mi caso

gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Npgsql.dll
gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Mono.Security.dll

PASO 3:


Ahora hay que agregar una línea de código XML al archivo machine.config del Framework que por lo general se encuentra en C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\

Abrimos el Archivo machine.config con el editor de su preferencia.

Y agregamos en el área de <DbProviderFactories></DbProviderFactories>
la Siguiente línea de código

<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.8.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
</DbProviderFactories>





PASO 4:

Ahora abrimos el motor de base de datos PostgrsSQL y creamos una base de datos sencilla
Base de datos Test

Recuerda que la base de datos esta sin datos hay que alimentarla.

PASO 5:

Ahora ejecutamos la siguiente line de código en el "Visual Studio 2008 Command Prompt".

c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"string de conexion" /project:NombreQueQuiera /language:CSharp

En mi caso

c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"DATABASE=test;HOST=127.0.0.1;PORT=5432;PASSWORD=yta;USER ID=postgres" /project:TestPostgreSQL /language:CSharp

Los Archivos van a quedar en esta Ubicación

C:\Program Files\Microsoft Visual Studio 9.0\VC
Puedes encontrar mas información sobre los Archivos de extensión.

CSDL en :

MSL en :

SSDL en :

De ahí lo pasas al proyecto que estés trabajando y Solo agregas los archivos ".cs"

No te preocupes si salen errores de referencia en el siguiente paso especificamos cuales son.

PASO 6:

Ahora hay que agregar unas referencias:

System.Data.Entity
System.Runtime.Serialization

Después de esto Tendrás que crear el App.Config y configurar la cadena de conexión.

Y listo ahora es posible hacer CRUD a la base de datos, para ver el ejemplo terminado dejo el SourceCode.