Principios de Diseño

## Principios de Diseño en una SOA

Un principio es una práctica aceptada por la industria y generalizada. Esta, propone un medio para lograr soluciones basadas en experiencias pasadas o en la aceptación de la industria. Cuando se empiezan a construir soluciones, un principio de diseño representa una guía altamente recomendada para conformar soluciones lógicas en cierto camino y con ciertos objetivos en mente.

Dentro de la arquitectura, existen un conjunto de ocho principios de diseño, los cuales son:

### **Contrato de servicios estandarizados**

Cuando un servicio es implementado como un servicio web, es importante declarar un contrato específico donde se encuentren especificaciones como:

* Nombre de servicio

* Forma de accesos

* Funcionalidades que ofrece

* Descripción de los datos de entrada de cada funcionalidad que ofrece.

* Descripción de los datos de salida de cada funcionalidad que ofrece.

Un contrato puede estar compuesto por uno o más documentos de especificación técnica para ser usados en tiempo de ejecución, sin embargo, pueden necesitarse documentos no técnicos que complementan la definición del servicio.

### **Bajo Acoplamiento**

El nivel de acoplamiento de un servicio deriva de qué tan dependiente es de otro para completar satisfactoriamente su objetivo. Para que un servicio sea eficiente, es conveniente que no dependa de ningún otro, o que si lo hace, sea a un nivel mínimo.

Para lograr esto se accede al servicio mediante su contrato, de forma tal que el acoplamiento que haya entre el consumidor y el servicio sea mínimo. Si esto se logra, los servicios podrán ser totalmente re-utilizables.

### **Abstracción del Servicio**

Permite ocultar información no requerida de un servicio sin que se afecte el uso del mismo. De esta forma se tendrá un paquete interno donde estará toda la información técnica y de negocio del servicio, y al consumidor se expondrá un contrato con la mínima cantidad de información necesaria para que este funcione correctamente y no se pierdan los objetivos de negocio.

Cuanta más información haya en el contrato, más acoplamiento hay entre este y el consumidor, y esto impide la re-utilización de los servicios.

### **Reusabilidad del Servicio**

La reutilización es el principal objetivo de una SOA. Un servicio debe ser explotado al máximo de tal manera que sea posible su uso en diferentes contextos y pueda cumplir diferentes objetivos. De esta manera los servicios podrán ser reusables dentro de la  misma aplicación.

Esto es beneficioso ya que cuando un servicio es útil para un único propósito, proveerá un valor, mientras si se reúsa, servirá para múltiples propósitos y de
esta forma proveerá un mayor valor y por ende, será una inversión más atractiva.

### **Autonomía del Servicio**

Todo servicio debe tener su propio entorno de ejecución. De esta manera el servicio es totalmente independiente y así, aumenta su fiabilidad. Esta autonomía representa la capacidad de autogobierno del servicio.

### **Descubrimiento del Servicio**

Todo servicio debe tener la
capacidad de ser descubierto para que de esta manera, pueda ser utilizado y encontrado fácilmente, de tal forma que no se dupliquen servicios que ofrecen la misma funcionalidad.

El descubrimiento requiere:

* Un medio de comunicación consistente acerca de recursos (meta información) que se quiere poner a disposición para ser descubiertos.

* Metadatos para ser documentados claramente por aquellos que tengan las habilidades de comunicación adecuadas

* Metadatos para ser almacenados de forma centralizada y mantenidos en un formato consistente.

* Permitirnos el acceso a la información de metadatos a los que queremos hacer recursos disponibles para el descubrimiento.

* La meta información para ser efectivamente buscada en respuesta de las búsquedas de criterios.

* La meta información para ser claramente entendida por los que van a revisar los resultados de las consultas de descubrimiento.

### **Facilidad de Composición**

Muchos sisTemas están comprendidos por archivos y componentes quienes en conjunto forman un proceso. Esto permite que sea menos complejo descomponerlo en unidades lógicas, de tal forma que se aprovechen al máximo, o se agrupen de una forma determinada para cada solución.

Si un sistema es descompuesto, puede componerse de nuevo. Esto permite que en caso de tener un problema de gran tamaño, éste se descomponga en pequeños problemas, de tal forma que se den soluciones lógicas por unidades y después a partir de ellas se forme un todo.

Según lo anterior, los servicios pueden ser soluciones unitarias genéricas donde pueden ser usados para construir servicios de mayor complejidad. Esto puede realizarse mediante
orquestación (WS\_BPEL) y coreografía de servicios (WS-CDL).

Cuando se aplica este principio las implicaciones en cuanto a automatización son muy claras. Una de estas es, el poder descomponer y brindar múltiples soluciones para luego unificarlas en un proceso, en vez de realizar un programa complejo y poco reutilizable, que además, no pueda evolucionar a través del tiempo.

### **Servicios sin estado**

Para maximizar la escalabilidad del servicio, y para aprovechar al máximo los umbrales de rendimiento se requieren inventarios de servicios, de tal forma que se trabaje en el interior y los servicios y la arquitectura que los rodean puedan ser los responsables de
la administración de los estados.

De esta forma los servicios no guardarán ningún tipo de información, ya que esto disminuye su capacidad de ampliación y por ende afecta también su disponibilidad.

Un administrador de estado representa una dimensión de solución de diseño que puede variar según la plataforma. Un estado hace referencia a la condición general de algo, un programa puede tener una transición entre diferentes estados usualmente porque participa en una actividad en tiempo de ejecución. Un administrador de estados puede ser considerado como el administrador temporal de los datos específicos de una actividad.

## Bibliografía

Erl, Thomas (2008). *SOA Principles Of Service Design*. EEUU: Prentice Hall. ISBN 0-13-234482-3