Maldivas

Como punto de partida os contare que actualmente mi equipo y yo, estamos desarrollando un sistema ERP para la empresa en la que trabajamos, lo hemos bautizado como «Maldivas», voy a describiros algunos de los procesos más interesantes que estamos implementando. Tratare de explicar el funcionamiento de aquellas partes que os parezcan más interesantes.

La arquitectura del sistema está basada en n-capas, utilizando como base el patrón Entity Data Model, «muy similar al EDM que Microsoft acaba de presentar», que pena que llevemos dos años de desarrollo y nos lo hayamos tenido que currar todo.

                La capa de presentación está basada principalmente en librerías de controles personalizadas que utilizan controles de terceros de la marca «devexpress», para los interesados www.devexpress.com y por supuesto de algún control propio de .net, todos los formularios maestros heredan de un formulario base que realiza todas las llamadas de forma genérica a la capa de negocios.

La capa de negocios está basada en librerías de clases que principalmente interaccionan con la capa de datos y la de presentación, además de  incorporar las reglas de negocio. Estas capas las hemos diseñado utilizando generics, por anticiparos algo realizamos llamadas de este tipo.

Manager<Clientes> manager = new Manager<Clientes>();

manager.GetAll();  me devolvería una colección de entidades de tipo cliente.

manager.Get(‘000001′) me devolvería una entidad de tipo cliente

manager.Get(Filters) me devolvería una colección de clientes filtrados por una o varias condiciones.

manager.Data.Nombre = «prueba»;  Guardaria en la entidad el nombre de un cliente

manager.SaveChanges();  Salvaria los cambios en la base de datos.

Estas funciones generan en tiempo de ejecución sentencias sql de tipo:

SELECT [Nombre],[Apellidos]… FROM dbo.Interlocutores WHERE Tipo = ‘1′ // Clientes

o

UPDATE dbo.Interlocutores SET [Nombre] = «prueba» WHERE [Codigo]= ‘000001′ AND [Nombre]  = @valorAnterior

En algunos casos podemos optimizarlas generando directamente los procedimientos almacenados para realizar la operación y cacheamos muchos de los datos que reutilizamos.

De esta forma minimizamos el código utilizado para trabajar con múltiples entidades, dedicare un post entero a mostraros esta arquitectura, ahora mismo estoy migrando parte para adaptar el EDM de Microsoft.

Posteriormente añadiremos otra capa basada en ws, para aprovechar reglas de negocios y funciones de la capa de acceso a datos que serán utilizadas en el sistema de comercio electrónico y los dispositivos móviles.

                Como la aplicación no va orientada al público en general, es muy específica para el sector en el que trabajamos, decidimos centrarnos únicamente en Sql Server y aprovechar al máximo su potencial, utilizamos procedimientos almacenados de forma masiva y muchas de las características propias sql como particionamiento de tablas, funciones, triggers, sinónimos y otros aspectos propios de la base de datos, creando una dependencia total con el Software de Base de datos.

Sé que hoy en día y con las arquitecturas existentes, así como las maneras diferentes que existen de abordar un problema, muchos no estarán de acuerdo con esta arquitectura, alguna persona me ha preguntado, ¿Como no lo hicisteis todo en aspx utilizando ws ? o ¿ Como no utilizáis Entreprise Library para crear un acceso más independiente de la base de datos ?  o ¿ Por qué no habéis desarrollado toda la parte de la capa cliente en WPF en lugar de Windows Forms ? , etc.

Tratare de explicar porque hemos tomado estas decisiones, además de los errores y aciertos que hemos cometido a lo largo del proceso de desarrollo, aspectos relacionados con el trabajo en equipo, diseño, adopción de herramientas, y otros que os darán una perspectiva amplia de los proyectos con los que trabajamos. Dedicare también algún post a hablar de las herramientas que utilizamos en el desarrollo (TFS, Team Suit, Team for Database Professional, CodeRush, Refactor, Resharper, Pruebas Unitarias, fxCop, Herramientas de generación de código propias utilizando Codedoom, etc),  y un poco sobre algún aspecto de la metodología de trabajo utilizada en este proyecto «Scrum».

Me gustaría mucho oír vuestras opiniones y críticas al respecto.

Siempre me ha gustado «fisgar» las aplicaciones de los demás, de ellas he sacado la mayoría de las funcionalidades que implemento en los programas que desarrollo. Como una imagen vale más que mil palabras os dejo algunos formularios del programa que iré desgranando en los sucesivos post, espero que os gusten.

 

 

 

 

 

Presentación

Mi nombre es Juan Irigoyen, después de muchos años he decido aportar algo a la comunidad que tanto de ha dado en los años que llevo dedicado a esta profesión. Empecé a interesarme por la informática a los 16 años gracias a un dragón 64 que me dejo un amigo, recuerdo mis andaduras a los 18 años con los primeros equipos IBM que solamente tenían discos de 5 ¼ y costaban la cerca de un millón y medio de las antiguas pesetas, mi primera computadora un Philips con un procesador  8088, mi primer disco duro de 20 Megas “como pesaba, tenía la controladora incluida”, mi primer ratón un “genius” que solo  funcionaba con un programa de Cad en msdos, me acuerdo vagamente cuando me conectaba a las bd por modem utilizando protocolos como ymodem, xmodem y otros para descargarnos archivos de 2 kb a velocidades de 300 bps.

Comencé desarrollando en basic , después vino pascal y c, mis primeros trabajos con datos fueron utilizando unas librerías llamadas btrieve escritas en c para basic, realice algún pequeño programa en ensamblador “que horror…” y luego a estudiar cobol, mi primer programa de 40 líneas me dio la friolera de 8000 errores, todo por un par de puntos y un identificador mal escrito.

He vivido el nacimiento de internet desde el comienzo, mis primeras páginas web se realizaron utilizando el block de notas sobre Netscape 1.0 con Html y Javascript “, aún conservo los manuales, algún día cuando valgan millones los venderé en ebay…”.

Desarrolle mi primer sistema de comercio electrónico por el año 94, grabar un valor en la base de datos nos llevo casi 3 días. Recuerdo cuando nos instalaron la primera línea Frame Relay de 64 Kbs con una batería de módems para dar acceso a internet a la zona de Cantabria y dando clases sobre comercio electrónico a los empresarios de la zona sobre el año 96, cuando me decían “¿Tú crees que la gente va a comprar mis productos sin verlos?, estás loco…”

Tecnológicamente hablando he hecho un poco de todo, desde Cobol, Basic, Pascal, C, Turbo C, C++, Turbo Pascal,  Dbase, Clipper, Delphi, Visual Basic, Java y como no, mi querido Visual Foxpro, que aún hoy echo de menos, sobre todo cuando compilo o veo la velocidad de las aplicaciones, muy por encima de cualquier desarrollo .net actual.Comencé a trabajar en .net hace unos 6 años, cuando se me ocurrió la idea de desarrollar una aplicación para los primeros dispositivos móviles con Wifi para un sistema informático de picking en tiempo real, buscaba un lenguaje potente y orientado a objetos, aquí fue cuando conocí c# y compaq framework beta 1, “que horror, tuve que volver a desarrollar en c++ algún interface para los netpad de www.psionteklogix.com”, me gusto mucho por su similitud con Java y empecé a trabajar con él.

Al mismo tiempo empecé a interesarme sobre arquitecturas distribuidas, patrones de diseño, metodologías ágiles, mejores prácticas, pruebas unitarias, trabajo en equipo con Team System y un montón de cosas para mejorar la calidad de los proyectos y el trabajo en equipo.

En estos últimos años he estudiado más, que en los 30 años anteriores, joder que deprisa va esto, me acuesto siempre con algún libro, revista o leyendo diversos blogs, actualmente la tecnología me desborda y muchas veces empiezo a desear olvidarme de la información que tengo en la cabeza, mi disco duro está llegando a su límite, hay gente que dice que el saber no ocupa lugar, os aseguro que mi recolector de basura no funciona muy bien, y claro me olvido de las llaves, el móvil, hasta de la gente que vive cerca de mí, como dice Rodrigo tendré que implementar bien la interfaz IDisposable.

Bueno, no quiero aburriros, mi idea en los próximos post, es la de hablaros de las aplicaciones que estamos desarrollando actualmente sobre Windows, Comercio Electrónico y Dispositivos móviles, compartir nuestras experiencias, explicar la funcionalidad y las diferentes decisiones que hemos tomado para el diseño de las aplicaciones.

Quiero agradecer a Rodrigo la posibilidad de escribir en Geeks, y como no, a mi equipo, sin ellos el proyecto actual no sería posible. “Sobre todo por la posibilidad de exportar los informes a texto plano”. Es broma, si no fuera por ellos no tendría con quien discutir.