Arquitectura basada en Componentes

Extractado de La Guía de Arquitectura Versión 2.0a del grupo de Patterns and Practices de Microsoft. Para los que nos gusta en la lengua de cervantes:

ARQUITECTURA BASADA EN COMPONENTES.

Una arquitectura basada en componentes describe una aproximación de ingeniería de software al diseño y desarrollo de un sistema. Esta arquitectura se enfoca en la descomposición del diseño en componentes funcionales o lógicos que expongan interfaces de comunicación bien definidas. Esto provee un nivel de abstracción mayor que los principios de orientación por objetos y no se enfoca en asuntos específicos de los objetos como los protocolos de comunicación y la forma como se comparte el estado.

El estilo de arquitectura basado en componentes tiene las siguientes características:

• Es un estilo de diseño para aplicaciones compuestas de componentes individuales.

• Pone énfasis en la descomposición del sistema en componentes lógicos o funcionales que tienen interfaces bien definidas.

• Define una aproximación de diseño que usa componentes discretos, los que se comunican a través de interfaces que contienen métodos, eventos y propiedades.

Principios Fundamentales

Un componente es un objeto de software específicamente diseñado para cumplir con cierto propósito. Los principios fundamentales cuando se diseña un componente es que estos deben ser:

Reusable. Los componentes son usualmente diseñados para ser utilizados en escenarios diferentes por diferentes aplicaciones, sin embargo, algunos componentes pueden ser diseñados para tareas específicas.

Sin contexto especifico. Los componentes son diseñados para operar en diferentes ambientes y contextos. Información específica como el estado de los datos deben ser pasadas al componente en vez de incluirlos o permitir al componente acceder a ellos.

Extensible. Un componente puede ser extendido desde un componente existente para crear un nuevo comportamiento.

Encapsulado. Los componentes exponen interfaces que permiten al programa usar su funcionalidad. Sin revelar detalles internos, detalles del proceso o estado.

Independiente. Los Componentes están diseñados para tener una dependencia mínima de otros componentes. Por lo tanto los componentes pueden ser instalados en el ambiente adecuado sin afectar otros componentes o sistemas.

Beneficios

Los siguientes son los principales beneficios del estilo de arquitectura basado en componentes:

Facilidad de Instalación. Cuando una nueva versión esté disponible, usted podrá reemplazar la versión existente sin impacto en otros componentes o el sistema como un todo.

Costos reducidos. El uso de componentes de terceros permite distribuir el costo del desarrollo y del mantenimiento.

Facilidad de desarrollo. Los componentes implementan un interface bien definida para proveer la funcionalidad definida permitiendo el desarrollo sin impactar otras partes del sistema.

Reusable. El uso de componentes reutilizables significa que ellos pueden ser usados para distribuir el desarrollo y el mantenimiento entre múltiples aplicaciones y sistemas.

Mitigación de complejidad técnica. Los componentes mitigan la complejidad por medio del uso de contenedores de componentes y sus servicios. Ejemplos de servicios de componentes incluyen activación de componentes, gestión de la vida de los componentes, gestión de colas de mensajes para métodos del componente y transacciones.

Ejemplos

Tipos comunes de componentes usados en aplicaciones incluyen:

• Componentes de interfaz de usuario, como grillas, botones, etc., generalmente conocidos como “controles”.

• Componentes de ayuda que exponen un conjunto específico de funciones usados por otros componentes.

• Componentes que se no se usan con mucha frecuencia o son intensivos en recursos y deben ser actividades usando una aproximación de solo en el momento justo (Just in Time (JIT)). Estos son comunes en escenarios de componentes distribuidos o en componentes remotos.

• Componentes encolados, aquellos cuyos métodos pueden ser ejecutados de forma asíncrona usando colas de mensajes del tipo almacenamiento, entrega.

Juan Carlos Pelaez
Arquitecto de Sofware.

Keywords: 3Metas, Juan Pelaez, Arquitectura, Emprendimiento, Desarrollo de Software, Aplicaciones Distribuidas.

Publicado en : www.juanpelaez.com

Publicidad: Necesita Arquitectos en soluciones basadas en plataforma Microsoft? 3Metas Corp tiene un grupo de especialistas que pueden apoyar sus procesos de diseño, construcción e implementación de soluciones. Contáctenos al correo electrónico sales at 3metas.com

Donde trabajo?

Leyendo sobre como construir compañías del futuro hoy me encuentro esta frase:

“En una compañía iluminada, que piensa en el futuro, los gerentes entienden la conexión entre aprendizaje, innovación y alta productividad y la convierten en una compañía donde los empleados son motivados a usar parte de su tiempo aprendiendo y experimentando con nuevas tecnologías. “
Joe McKendrick, FASTForward

Si usted está en el área de tecnología, gestión de proyectos, gerencia, salud, o cualquier otro sector que se me venga a la cabeza ahora debería trabajar en una compañía así y si no existe en su industria debería crearla.

Yo tengo la fortuna de trabajar en 3Metas.
(No existía algo así en mi industria así que la creamos desde cero).

Juan Pelaez
Arquitecto de Software

Keywords: Juan Pelaez, Emprendimiento, Innovación, 3Metas, Gestión de empresas de Software.

Technorati Tags: ,,,

Publicado en: www.juanpelaez.com

Arquitectura de Software 101

Me gusta mucho el conjunto de guías de arquitectura de soluciones .Net del grupo de Patterns and Practices de Microsoft. El documento principal es La Guia de Arquitectura Version 2.0a, una de las principales razones por las que me gusta esta guía es por la definición de cómo encajan los diferentes elementos o tipos de arquitecturas juntas en un esquema que es sencillo pero muy elegante y que se resume en este gráfico:

Elementos Arquitectura

Al segmentar las aplicaciones por tipos (más o menos obvio no?), y separar los conceptos como estilos de arquitectura, atributos de calidad, tendencias etc., se obtiene una forma más sencilla de explicar porque se hace una aplicación de una forma y no de otra, lo que en general podemos decir que es la arquitectura. Una de las secciones más interesante tiene que ver con los estilos de arquitectura (sobre el que profundizare más adelante) ya que establece las diferencias entre elementos que son un poco confusos al seleccionar que tipo de aplicación se quiere construir y nos permite explicar de una manera clara al cliente por que se tomaron estas decisiones de diseño.

Si usted alguna vez se ha preguntado como una arquitectura SOA se integra con una arquitectura por componentes y con el paradigma de Orientación por Objetos este es definitivamente un documento que debería leer.

Juan Peláez

Arquitecto de Software

Publicado en: www.juanpelaez.com

Keywords: Juan Pelaez, Arquitectura de Software, 3Metas, Patterns and Practices, Microsoft, .Net.

Publicidad: Necesita ayuda en la arquitectura de su aplicación .Net?, no está seguro si su desarrollo cumplirá con los requerimientos de escalabilidad, seguridad, requerimientos de negocios o expectativas de los usuarios?, Quiere validar si sus desarrolladores o contratistas siguen las mejores prácticas para el desarrollo de aplicaciones? Los servicios de consultoría en Arquitectura de Soluciones de 3Metas seguramente serán un de las mejores alternativas. Contáctenos al correo electrónico [email protected]

Pruebas de compatibilidad de aplicaciones con Windows Vista (e IE8)

Un Post rápido…vengo trabajando con el equipo de DPE de Microsoft Colombia en Laboratorios de Compatibilidad para aplicaciones que funcionen con Internet Explorer 8, Windows Vista y Windows 7. En los próximos días en la página de InnovateOn relacionada con estos temas, podrán encontrar información detallada al respecto. Por ahora un recurso muy importante que quiero compartir son estos enlaces que corresponden a maquinas virtuales con XP, Windows Vista, Internet Explorer 6,7 y 8.

http://www.microsoft.com/downloads/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&displaylang=en

Publicado en www.juanpelaez.com

Pan de Azucar II

Aunque ya habia escalado esta montaña en 2004, esta escalada se convirtió en el recuentro con mi mejor amigo y hermano del alma, nada produce mayor felicidad que guiar con seguridad en la montaña a aquellos a quienes se quiere entrañablemente y con quienes se ha compartido toda la vida.

Florida, USA 2009

En Enero de 2009 viaje a la Florida en los Estados Unidos y recorrí todo el sur de la florida con mi hermano, no solo visitamos Tampa, Saint Petersburg, Fort Lauderdale, Miami y Los Cayos sino que tuvimos la oportunidad de vivir el Super Bowl XLIII dentro de la cultura américana.

CDN and Cloud Computing …juntos.

CDN (Content Distribution Network) es un sistema de distribución de archivos basado en ubicaciones geográficas muy útil cuando se construyen sistemas de alta disponibilidad. Ya hice un post del tema hace algunos días aquí.

Y también hace poco escribí sobre el sistema de hosting que uso que es basado en Cloud Computing, aquí.

Hace poco estos dos servicios se han integrado para ofrecer un mejor paquete y ahora es posible por muy poco dinero y solo con una tarjeta de crédito tener en cuestión de horas un sistema de hosting por demanda integrado con la red de distribución de contenido. Todo parece muy sencillo: creo una carpeta en el sistema del sitio y subo mis archivos, marco la carpeta como publica y listo, ahora esos archivos se distribuyen usando una CDN de las más usadas en el mundo. Cuando no lo quiero mas entonces solo quito la marca de folder publico y listo, ya no se actualiza el archivo en el cache de la CDN.

Supongamos que creamos un sitio de distribución de videos del tipo YouTube o de música como sonidolocal.com, eso son miles de canciones o archivos de gran tamaño, un monton de dinero para gastar en ancho de banda, almacenamiento, etc, con estos sistemas lo que hago es pagar por uso, dejar que ellos corran con los costos de infraestructura y demás y puedo crecer el servicio a la medida que mi sitio crezca.

Amazon ofrece un servicio parecido llamado S3que parece funcionar muy bien, pero en el cual hay que pagar por el almacenamiento y aparte por el uso de la CDN, asi que el servicio de Mosso en ese aspecto parece mejor.

Cuando empecé mi primera compañía en internet en el año 2000, el primer gasto era de 550 dólares mensuales por un servidor dedicado en DellHost, una cifra absurda para una empresa que había facturado 0 dólares el día 1, pero necesario para poder poner algo en la red. Estos nuevos sistemas de costos y de pago por uso hacen que todo cambie, no solo para las nuevas compañías, también para nuestros clientes.

Juan Pelaez

Arquitecto de Software.

Keywords: Mosso, CDN, Juan Pelaez, Juan Carlos Pelaez, Software como Servicio, SaaS, Infraestructura como Servicio, Hosting as a Service, Hosting como Servicio, Redes de Distribucion de Contenido.

Technorati Tags: ,,,

Mis Amigos en FaceBook…usando PopFly

Hoy tuve un día tremendo (espectacular), en gran parte por un par de buenos amigos que me arreglaron el día, la semana y de pronto el mes.

Aprovechando las técnicas de popfly para construir MashUps, quise hacer un pequeño homenaje a mis amigos rotando por aquí sus fotos del perfil de Facebook.

************************************

Update: Lamentablemente el sitio de popfly fue cerrado, aunque era una idea interesante parece que no tuvo tracción ni se veia claro como iba a competir con otras formas de desarrollo.

*************************************

Los que no están en Facebook, pero son amigos también los recuerdo y les agradezco todas las cosas que han hecho por mí, por Claudia y por Felipe todos estos años.

Juan.

Evento – Gestión de Pruebas con VS2008.

Por invitación de Luis Linares de Microsoft Colombia el pasado 30 de Noviembre de 2008 presente una sesión sobre gestión de pruebas usando VSTS 2008, durante la presentación realizamos diferentes modelos de pruebas automatizadas, especialmente pruebas unitarias con cobertura de código, pruebas de funcionalidad web y pruebas de carga.

Junto con Miguel Mendoza de Synergy desarrollamos algunos escenarios un poco más profundos, como hacer pruebas de funcionalidad y carga de un portal de Sharepoint usando VS2008 for Testers. Pruebas automatizadas basadas en información de bases de datos contra aplicaciones desarrolladas en PHP y /o corriendo en otras plataformas y generación de datos de pruebas usando DataGenerator de VS2008 for DataBase Professionals.

Gracias a todos los participantes por sus preguntas y comentarios, a Miguel Mendoza por su apoyo en las demostraciones y en la preparación de la sesión y a Luis por invitarnos, espero que el evento haya sido productivo para todos.

Descargar Presentación: Gestión de Pruebas con VS 2008 for Tester y Team Foundation Server (TFS).

Juan Pelaez

Arquitecto de Software.

Publicado en : www.juanpelaez.com/blog

Creditos: para la construcción de la PPT he usado información e imágenes de otras presentaciones de expertos en TFS y VS2008, en especial de las siguientes personas:

Juan Carlos Viñas

TFS Competence Administrator

Jorge Ramo López

EPM Manager

Raona http://www.raona.com

Rodrigo Corral

MVP Team System

Plain Concepts

http://www.plainconcepts.com

Blog: http://geeks.ms/blogs/rcorral

Bruno Capuano

MVP

http://www.avanade.es

Blog: http://elbruno.com

Keywords: VS2008, Visual Studio for Tester Editions, Gestión de Pruebas, Pruebas de Software, Automatización de Pruebas, SharePoint, Pruebas Unitarias, Cobertura de Código, Pruebas de Funcionalidad Web, Pruebas de Carga, Pruebas de Stress.

JQuery Day 01

He empezado un nuevo proyecto para Microsoft Colombia y la Secretaria de Salud que es a la vez una prueba de concepto de una migración de una aplicación de VS2003 a VS2008 como la reconstrucción de la aplicación (refactoring) hacia un modelo orientado a Software + Servicios.

Uno de los entregables del proyecto es un Web Site, así que pareció una buena oportunidad para comenzar a explorar JQuery, que lo había visto por ahí con los anuncios de soporte en VS2008 y demás pero nunca lo había tocado.

Lo primero es hacerlo funcionar, eso lo explico mejor Scott Guttrie en un post, entonces yo cree un Web Application, luego una carpeta scripts, y en ella copie el archivo jquery-1.2.6.js y el archivo jquery-1.2.6-vsdoc.js, estos dos me permiten tener JQuery e IntelliSense en Visual Studio, se pueden descargar de Aquí.

Luego incluí el archivo de JQuery y el archivo de la documentación en el default.aspx así:

<script src=”scripts/jquery-1.2.6.js” type=”text/javascript”></script>

<script src=”scripts/jquery-1.2.6-vsdoc.js” type=”text/javascript”></script>

Si no se incluye el archivo de la documentacion JQuery funciona, pero no tengo intellisense.

Ahora, cómo funciona esto:

Recorriendo el DOM

var help = $(“#help”); //obtiene el elemento que se llama help, es como usar document.getElementById solo que funciona en cualquier browser.

var p = $(“p”); //obtiene todos los elementos de tipo <p>

var username = $(“input[name=’username’]”); //obtiene un elemento de tipo input llamado username

Todas las funciones anteriores retornan un arreglo (array), de hecho, la función $(), conocida como función JQuery siempre retorna un array de 0 elementos, 1 elemento o el número de elementos que encuentre (y es en realidad una abreviación de JQuery(“p”) ).

Es una práctica recomendada nombrar las variables con el signo pesos, así que el último ejemplo debería ser algo como esto:

var $username = $(“input[name=’username’]”);

Al ser $username un array tiene un conjunto de métodos que se pueden usar para obtener su longitud, elementos, etc (var form = $form.get(0); var form = $form. length)

Manipulando el DOM

Una vez que tengo identificados los objetos puedo empezar a hacer algo con ellos, algunos consejos:

No es necesario crear todas las clases que se van a usar en la hoja de estilo, solamente se necesitan para que JQuery las identifique

Un elemento puede tener varias clases aplicadas asi: <table class=”VisualTable PopulationTable”>…</table>, de esta forma puedo separar las clases que modifican los diseñadores de las que yo utilizo en JQuery para manipular los objetos.

Eventos

Uno de los elementos importantes de JQuery son los eventos, estos responden generalmente a acciones de los usuarios, pero uno que siempre es útil es el evento ready del document. Algo como esto:

$(document).ready(function{ myCodigo});

Que quiere decir que se debe ejecutar el código {MyCodigo} cuando la pagina este lista. Algo interesante es la forma como se declarara la función a ejecutar, muy similar a un método anónimo y también con una notación de JSON. Sin embargo si por alguna razón a uno no le gusta esta forma de funciones en línea puede usar esta notación: %(document).ready(onLoaded); donde onLoaded es un método definido previamente en el script. (esto también puede ser útil cuando se combinan diversos scripts y se quiere invocar desde un evento una parte de otro script).

Muchos eventos reciben funciones como parámetros, incluso una función en cada parámetro, por ejemplo:

$(“#partList .row”).hover

(

function()

{

$(this).addClass(“rowOver”);

},

function()

{

$(this).removeClass(“rowOver”);

}

)

Recibe dos funciones, una para cuando se entra al hover y otra para cuando se sale. Aquí puede ser interesante notar el $(this) que significa un “apuntador” al elemento que está ejecutando el evento, algo parecido al $(document).

Juan Pelaez.

Arquitecto de Software.

Keywords: JQuery, Web Applications,

Technorati Tags: ,

Publicado en www.juanpelaez.com/blog