Layers **
Cuando transformas un
modelo de dominio (182) en una técnica de arquitectura de software
o se realiza un BROKER (237), DATABASE ACCESS LAYER (438),
MICROKERNEL (194), o HALF-SYNC/HALF-ASYNC (359) . . .
.. . hay que apoyar el
desarrollo independiente y la evolución de diferentes partes del
sistema.
✦✦✦
Independientemente de las
interacciones y de acoplamiento entre las diferentes partes de un
sistema de software, hay una necesidad de desarrollar y evolucionar
de manera independiente, por ejemplo debido al tamaño del sistema y
los requisitos de tiempo de salida al mercado. Sin embargo, sin una
separación clara y razonada de las preocupaciones de la arquitectura
software del sistema, las interacciones entre las partes no pueden
contar con el apoyo adecuado, ni tampoco su desarrollo independiente.
El desafío es encontrar
un equilibrio entre un diseño que divide la aplicación en partes
significativas y tangibles que se pueden desarrollar y desplegar de
forma independiente, pero que no se pierda en una gran variedad de
detalles para que la visión de la arquitectura y las cuestiones
operativas, tales como el rendimiento y la escalabilidad se traten
adecuadamente. Un grupo especial, el diseño monolítico no es una
opción viable para resolver el problema. Si bien permite la calidad
de los aspectos de servicio a abordar más directamente, es probable
que resulte en una estructura espagueti que degrada las cualidades de
desarrollo tales como comprensibilidad y facilidad de mantenimiento.
Definir una o más capas
para el software en desarrollo, con cada capa que tiene una
responsabilidad diferente y específico.
Asignar la funcionalidad
del sistema a las respectivas capas, y dejar que la funcionalidad de
una capa particular sólo se base en la funcionalidad ofrecida por
las mismas capas o inferior. Proporcionar todas las capas con una
interfaz que esté separada de su aplicación, y dentro de cada
programa de capa usar estas interfaces sólo cuando se accede a otras
capas.
✦✦✦
Una arquitectura en CAPAS
define una partición horizontal de la funcionalidad de un software
de acuerdo con subsistemas, de manera que cada grupo de
funcionalidades está claramente encapsulado y puede evolucionar
independientemente. Los criterios específicos de partición se puede
definir a lo largo de varias dimensiones, tales como la abstracción,
granularidad, distancia hardware, y la tasa de cambio.
Por ejemplo, una
disposición en capas, con las siguientes particiones de una
arquitectura: presentación, lógica de aplicación, y los datos
persistentes que sigue la dimensión abstracción. Una capa que
introduce los objetos de negocio cuyas entidades son utilizados por
una capa de procesos de negocios sigue dimensión de granularidad,
mientras que uno que sugiere un sistema operativo, una capa de
protocolo de comunicación, y una capa con la funcionalidad de la
aplicación sigue la dimensión distancia hardware.
Un desafío clave es
encontrar el "correcto" número de capas. Muy pocas capas
pueden no separar suficientemente los diferentes temas en el sistema
que puede evolucionar de forma independiente. Por el contrario,
demasiadas capas pueden fragmentar una arquitectura de software en
pedazos sin una clara visión y alcance, lo que hace que sea difícil
para ellos evolucionan en absoluto.
Normalmente, cada
responsabilidad autónoma y coherente dentro de una capa se realiza
como un objeto de dominio por separado, para dividir aún más la
capa en partes tangibles que pueden ser desarrolladas y evolucionaron
de forma independiente.
NOTA
Tipo: Arquitectónico
Estructura una aplicación en
diferentes en grupos - de diferentes niveles - subtareas.
No hay comentarios:
Publicar un comentario