Sunday, January 30, 2005

I already am first in google...!!!

Oh my god...!!!

Hoy me anime a buscar mi nombre en Google y me sorpredi al encontrarme primero en las lista de resultados :)

Recuerdo que hasta hace unos dias atras, no lograba serlo. Este es un momento agradable de por si.

Javier Luna in Google
http://www.google.com/search?hl=en&q=javier+luna

Luego, opte por buscar mi nickname y mayor fue mi sorpresa al encontrar 138 paginas como resultado de la busqueda.

http://www.google.com/search?hl=en&lr=&q=guydotnetxmlwebservices

Thanks Google... again...!!!

Monday, January 24, 2005

BusinessLayer.Components Released, too...!!!

Les entrego las version publica del BusinessLayer.Components. Orientada a una realidad de negocio, en particular.

Tomando como muestra la DB Pubs, del SQL Server, para efectos practicos.

Este bloque de codigo, es de libre uso, y podran descargarlo de cualquiera de los siguientes lugares:

http://www.msnusers.com/guydotnetxmlwebservices/Documents/Sql.Pubs.BusinessLayer.rar
http://www.msnusers.com/guydotnetxmlwebservices/Documents/Sql.Pubs.BusinessLayer.zip

Pero previamente deberan unirse al grupo a traves del siguiente link:
http://groups.msn.com/guydotnetxmlwebservices/join

El BusinessLayer, es la capa mas compleja dentro de la arquitectura de un producto de software.

Este es el lugar donde se debe definir: (1) las entidades de negocio, (2) las operaciones que se han de realizar contra la DB y (3) el modelo de objetos que sera aprovechado por las demas capas de la arquitectura, ie, la capa de usuario, la capa de servicios, etc.

El BusinessLayer, es una solucion que esta compuesta por los siguientes proyectos:

BusinessLayer.Entities: En la cual se definen las entidades de negocio que nos han de permitir enviar informacion entre esta capa y la capa de usuario, por ejemplo. Notese un detalle importante, el cual consisten en establecer el mapeo entre las entidades relacionales propia de la estructura de una base de datos y su correspondiente a nivel de objetos.

Por ejemplo, establecer la forma en la que se ha de plasmar el campo de una tabla que soporta nulo a nivel de base datos y como este se ha de comportar dentro del mundo de .NET, es una definicion que ha de establecerse aqui.

BusinessLayer.IDataWrapper: Aqui se definen cuatro interfaces que permitiran restringir las operaciones contra la DB, para una tabla en particular. Ajustandose a lo que propone CRUD, en ese sentido.

BusinessLayer.DataAccess: En este proyecto se definen las clases que facilitaran las operaciones contra la DB. Aqui se aprovecha todas las bondades por lo cual existe el DataLayer.Primitives. Y cuya version publica fue liberada hace unos dias atras.

El simple hecho de realizar un SELECT sobre la table EMPLOYEE, se reduce a crear la clase DataEmployee la cual ha de heredar de PrimitiveEntity, implementar la interfaz ISelectable, y listo. Olvidandote de las exitencia de los SqlConnection, SqlCommand, SqlDataAdapter, etc.

Del mismo modo, si se desease realizar un INSERT sobre la tabla JOBS. En este caso, la interfaz a implementar seria IInsertable y sobreescribir el metodo OnInsert para indicar los parametros necesarios para la ejecucion del store procedure, correspondiente.

Dentro del namespace Executable, se estableceran esas clases que permitiran realizar operaciones con una cierta complejidad: querys, joins u otros. Cuyos ejemplos, no estan brindados en este bloque de codigo. Pero con seguridad seran entregados en los proximos releases del BusinessLayer.

BusinessLayer.IComponents: Este proyecto rige la forma, en la que se ha de implementar el BusinessLayer.Components. Basicamente, se definen interfaces que se han de implementar por las diferentes clases dentro del siguiente proyecto.

BusinessLayer.Components: Este proyecto es la implementacion en si, de lo que propone BusinessLayer.IComponents. Como resultado, brinda, un modelo de objetos que sera aprovechado por la diferentes capas del arquitectura, como la capa de usuario o la capa de servicios.

Aqui tenemos dos cosas muy marcadas, por un lado los Collections y por el otro, los Atoms. La primera de ellas tendra operaciones como Insertar y Eliminar elementos de la coleccion, sincronizando con las operaciones correspondientes a nivel de base de datos. Y la segunda de ellas, brindara operaciones de actualizacion basicamente, la cual del mismo modo, sincronizara nivel de base de datos, con la operacion correspondiente.

Finalmente, el BusinessLayer.WinApp es el proyecto que testea esta capa de la arquitectura.

En este primer release del BusinessLayer.Components, se tuvo la intencion de mostrar la estructura basica de esta capa de la arquitectura de un producto de software, para complementar la idea que se presento al entregar la version publica del DataLayer.Primitives.

En ese sentido, solo brindo como testing, en esta oportunidad, dos operaciones muy sencillas. Por un lado, la de iterar entre Jobs mostrando los Employees que se ajustan a un Job en particular. Y por otro lado, la misma intencion usando Publishers y los Employees que se ajustan a un Publisher en particular.

Ademas, de un pequeño formulario para agregar elementos a la table Jobs.

En los proximos dias, deberia darme un tiempo para poder publicar el siguiente release del BusinessLayer.Components, donde pueda apreciarse mayores bondades de este bloque de codigo, que no he podido entregar en esta oportunidad.

Saturday, January 15, 2005

The Winner Is...

Hoy en la mañana se integro a

http://groups.msn.com/guydotnetxmlwebservices/

Siendo el miembro numero 100 de este Group MSN. Y se adjudico la invitacion a GMail que habia ofecido en el post anterior.

Entrego las pruebas en pro de la transparencia del proceso :)





Rumbo a los 200 miembros...!!!

Friday, January 14, 2005

100 Members Coming Soon...

Esto si es curioso, de verdad.



Inicie este Group MSN:

http://groups.msn.com/guydotnetxmlwebservices/

Con la intencion de poder entregar aquellas cosas que alcanzasen el calificativo de util. No esperaba que puediese serle util a tanta gente :)

Faltan solo 3 integrantes mas, para llegar a los 100 miembros.

Y quisiera premiar a quien llegase a ser el miembro numero 100, con una invitacion a Gmail

Que les parece? No esta da mal, eh.

Friday, January 07, 2005

Oracle.DataLayer.Primitives Public Version Released...!!!

Les entrego la version publica del DataLayer.Primitives que habia publicado anteriormente.

http://guydotnetxmlwebservices.blogspot.com/2004/11/datalayerprimitives-and.html

Pero en esta oportunidad, con soporte al Oracle DataBase, haciendo uso del Oracle Data Access Provider - ODP

Que podran descargar de cualquiera de los siguentes lugares:

http://www.msnusers.com/guydotnetxmlwebservices/Documents/Oracle.DataLayer.zip
http://www.msnusers.com/guydotnetxmlwebservices/Documents/Oracle.DataLayer.rar

Pero previamente deberan unirse al grupo a traves del siguiente link:
http://groups.msn.com/guydotnetxmlwebservices/join

Algunos puntos que valen la pena comentar, para esta version de codigo, son:

Dentro del CommonLayer.Customs, se agrego el CustomBoolean, que encapsula el mapeo de un tipo de dato booleano, con el que no se cuenta dentro de Oracle. Algo relativamente similar al Boolean que se mapea naturalmente con el tipo de dato BIT del SQL Server.

Este tipo de dato, se comportara como un Boolean dentro del .NET y como un CHAR(1) contra la database. Con valores 'Y', 'N'. A traves de las propiedades Value y DBValue, respectivamente.

De esta manera contamos con un tipo de dato que te permitira centralizar el manejo de tipos de datos booleanos, que se obtiene de la database Oracle.

Por otro lado, el PrimitiveParameter cuenta con una propiedad adicional: Position, la cual indica el orden que obstenta dentro de alguna collection de PrimitiveParameters.

Debido a que SQL Server, no es estricto en el orden en el que se envian los parametros para la ejecucion de un store procedure, pues no era necesario contra con esta propiedad en el DataLayer.Primitives orientado a dicho motor de Base de Datos.

Sin embargo, en Oracle, si lo es. De esta manera, cada vez que agregamos un elemento a la colleccion, salvamos el orden en el que se esta agregando dicho elemento. Para que posteriormente sea entregado en dicho orden al store procedure, que se vaya a ejecutar.

En este objetivo, PrimitiveParameterPositionComparer implementa la interfaz IComparer, validando la propiedad Position entre elementos contiguos de una colleccion.

PrimitiveParameterCollection, define una propiedad llamada Sortered la cual ordena la lista de elementos de la colleccion de PrimitiveParameters aplicando el criterio de orden entre los elementos, establecido en PrimitiveParameterPositionComparer.

Finalmente, PrimitiveSize permite encapsular la longitud para los tipos de datos CHAR, VARCHAR2, etc. cuando se crea un PrimitiveParameter