martes, 22 de mayo de 2012

Patrones de diseño: implementando Abstract Factory

Los patrones molan, si sabes cómo usarlos, más.

Hace algún tiempo compramos en la oficina el libro “Patrones de diseño para C#”. Este libro detalla los 23 modelos de diseño fundamentales y aunque aún no he tenido tiempo de leerlo al completo, lo que he visto está bien explicado y es sencillo de entender.

No es mi intención debatir los beneficios que se obtiene al utilizar patrones de diseño, de eso seguro que puedes encontrar muchísima información en miles de blogs.

Sin embargo, si lo que buscas son ejemplos de cómo (pero sobretodo porqué) implementar un patrón de diseño desde cero, ahí amigo, seguro que lo tienes más difícil.

Los ejemplos que yo he encontrado, muchas veces son excesivamente formales, y se centran en explicar el patrón en sí, implementando algún ejemplo concreto sobre la definición formal del patrón.

Mi idea es partir de un escenario en el que el código es correcto, en términos funcionales, pero no es correcto en el sentido de que incumple varios principios SOLID, y además en el momento en el que las especificaciones cambien, va a ser también más complicado de mantener.

Veremos que para optimizar el escenario propuesto, el patrón que mejor encaja es el denominado “Factoría Abstracta”. Trataré de explicar porqué, y reescribiremos el código hasta tener la implementación del patrón completada.

De esta manera, podremos evaluar los beneficios que vamos a obtener al usar la Factoría Abstracta, nuestro código ganará calidad, nosotros algo de ego (no mintáis, malditos geeks!), a partir del momento en el que decidáis incorporar el uso de patrones a vuestros proyectos, miles de gatitos dormirán tranquilos… y a nosotros no nos “sangrarán” los ojos al ver nuestro ahora precioso código.

Bueno, al turrón! y ánimo, que me ha salido un “troncho” de post que no es para unas prisas ;-D

lunes, 19 de septiembre de 2011

Del software y sus estimaciones: Los puntos de función.

 

Erase una vez, las valoraciones económicas.

Una mañana cualquiera, después de una reunión de una hora:

- Bueno, pues creo que con todo lo que hemos hablado, tendrás claro lo que necesitamos.

- Hombre, aún hay algún punto que aclarar, lo que me has contado del proceso de importación de ficheros Excel hay que concretarlo un poco más.

- Pero hombre, si eso es subir unos ficheritos a la web con los pedidos de los clientes y listo ¿no?.

- Bueno, eso parece a priori. Pero hay alguna que otra laguna... ¿que pasa con los productos no visibles? ¿y si se modifica el Excel? ¿todo el mundo puede subir ficheros?, entiendo que no... pero desde luego tenemos que profundizar un poco... vamos, creo yo.

- Bueno, seguro que cuando te pongas con ello, lo veremos más claro.

- Ya, ya... pero es que también tenemos que ver la parte del gestor de contenidos. Como idea está bien, pero no es sencillo y tenemos que definir bien lo que necesitan los usuarios. Creo que no nos vendrían mal un par de reuniones más.

- A ver, eso también lo hemos visto. Échale un vistazo a Joomla o a Umbraco y te haces a la idea. Claro que no necesitamos tanto... pero por ahí irán los tiros. Además, tengo que reunirme con dirección para presentar el proyecto y necesito que me des tu valoración.

- ¿Valoración?

- Si, por supuesto aproximada. Necesito una cifra para este viernes... y que me digas aproximadamente (risilla maquiavélica) cuanto vais a tardar.

- (con síntomas evidentes de resignación) Veré que podemos hacer...

¿Os suena todo esto? A mi más de lo que me gustaría, la verdad. Podría ser una conversación cualquiera, de un cliente cualquiera con un pobre desarrollador cualquiera... maldita sea! nos ha tocado a nosotros!

Al final, al pobre desarrollador le toca utilizar métodos cuando menos dudosos, para dar una “Valoración aproximada”... como podemos ver aquí.

Y digo yo ¿Debe ser así? Todos sabemos que es muy difícil estimar correctamente el coste inicial de un proyecto de software, más aún si pretendemos (y deberíamos) que este software cumpla unos mínimos de calidad, la tarea se presenta ardua y complicada.

miércoles, 24 de agosto de 2011

Uso de Interfaces en aplicaciones n-capas

 

Hola a todos.

Ayer tuve una discusión sana con mi compañero Sergio (podéis seguir su magnífico blog aquí), acerca de las arquitecturas n-capas, y más concretamente del uso de “interfaces“para la comunicación entre capas.

La discusión giraba en torno a lo que es una “Interfaz”, como concepto,  en el contexto de comunicaciones entre capas. La idea que primero nos viene a la cabeza, es que la interfaz es lo que la capa expone a modo de servicios (métodos y clases públicas) para comunicarse con otras capas.

Y si bien esa idea es completamente correcta y cierta, tenemos que tener en cuenta que las interfaces (entendidas aquí como elementos dentro de una programación orientada a objetos), también nos proporcionan un contrato a cumplir por las clases que las implementen. ejemplos los tenemos a miles (IComparable, IEnumerable, IQueryable, .. y unas cuantas más)

Pues bien, el propósito de este post es mostrar cómo las interfaces nos pueden ayudar a conseguir cierto nivel de desacoplamiento entre capas, con todos los beneficios que eso nos trae: testeabilidad, división de responsabilidades, y otros muchos.

Bueno, vamos al turrón.

viernes, 20 de mayo de 2011

Configuración de VS2010 para trabajar con Azure mediante entorno simulado.

Hola!

Este es mi primer post, y he decidido escribir sobre algo con lo que estamos ahora mismo trabajando/investigando: Windows Azure.

¿y qué es eso? pues copieteando a la wikipedia: “Windows Azure Platform de Microsoft es una plataforma de servicios que ofrece computación en nube, entró en producción el 1 de enero de 2010. "Ofrece una amplia gama de servicios de internet que se pueden consumir tanto desde entornos locales o en entornos de internet" (aunque la plataforma en sí no está disponible para implementar en los entornos locales). Es significativo que es el primer paso de Microsoft en la computación en nube después del lanzamiento de Microsoft Online Services.”

Vamos, a mi modo de ver, un megahosting de Microsoft, perfectamente integrado con todas sus herramientas de desarrollo y que nos permite desplegar aplicaciones en la nube de una manera muy rápida y aparentemente, sencilla… Pero claro, primero tendremos que configurar nuestro entorno de trabajo ¿no?.

Microsoft nos da (que buenos son) la posibilidad de montar un entorno de simulación localmente, gracias a las herramientas de desarrollo de Azure y a su SDK. vamos a ver como montarlo y tener configuradito nuestro querido VS2010.