Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ventajas
Permite sustituir capas por otras implementaciones alternativas, por ejemplo, se podrá
sustituir la capa de presentación implementada con tecnologías “web” por otras
implementadas con tecnologías “swing” [MF02]. Esto permite que problemas complejos
sean distribuidos en pequeñas piezas más manejables [INT07].
Las capas superiores brindan servicios a las capas inferiores permitiendo la reusabilidad
del código [NT07].
Minimiza las dependencias entre las capas. Si se quiere cambiar por un framework de
O/R mapping (Object / Relational mapping, mapeos del modelo relacional a objetos),
esto no impactará en las capas superiores [MF02].
No es necesario conocer más capas que la que se está viendo y las “colindantes”.
[MF02].
Los detalles de implementación de cada capa son escondidos para el resto [INT07].
Desventajas
• Si sobrecargamos a la aplicación empresarial con capas, perderá performance
[MF02].
• Tienen el problema de los “cambios en cascada”. Por ejemplo, en una típica aplicación
empresarial que muestra un dato en su UI (User Interface, Interface de Usuario), que
viene desde la base de datos, si este cambia se modifica, este cambio impacta en
todas las capas por las que pasa el dato [MF02].
Se considera necesario aclarar que la separación en capas puede conducir al uso indebido de las
mismas. Si bien no se puede considerar como una desventaja en sí misma, se considera oportuno
entrever que su mal uso produce una violación del encapsulamiento: Cómo las capas ocultan los
detalles de implementación al resto de las mismas. Una violación de esto puede “costar caro”, ya
que si una capa (ej. capa A) usa directamente los detalles de implementación que se encuentran
en otra (ej. capa B), cuando se produzcan cambios en la capa B también se verá afectada la capa
A [INT07].
Según Fowler en su sitio de Internet [INT06], hace referencia a algunos principios básicos de la
separación en capas a través de una puntuación.
A sí mismo, Evans en su libro [EE03], explica que la separación en capas permite: un diseño
cohesivo (donde las dependencias están hacia las capas inferiores), reduciendo el acoplamiento
entre las capas superiores y por último, aislar el modelo de dominio del resto de las capas,
permitiendo, escribir código relacionado únicamente con el dominio de la aplicación.
Como corolario de este apartado, se puede distinguir, que tanto Eric Evans como Martin Fowler
coinciden en sus principios [INT06], dándole Evans la importancia de aislar el dominio del resto de
la aplicación.
Esta separación, mencionada por Fowler [MF02], está presente en la mayoría de los
desarrollos Web por capas. Esto no quiere decir que no tengamos más capas, sino que la
cantidad de las mismas va a depender del sistema a desarrollar. Es decir, existen grandes
variaciones en cuanto a la cantidad de capas que se utilizan en los distintos desarrollos de
aplicaciones Web. La mayoría de las arquitecturas utilizan las siguientes cuatro capas
conceptuales [EE03].
La interface de usuario
Esta capa se encargará de resolver cómo exponer la lógica de negocio a través de una
interface. La interface más común es la Web. Por lo que se deberá tener en cuenta los
límites de la distribución de los objetos entre el browser (navegador) - cliente y el servidor
web.
La capa de aplicación
Esta capa no contiene reglas de negocio. Será la encargada de coordinar y delegar trabajo
a los objetos de dominio de la capa subsiguiente. Muchas veces, esta capa, no hace el
trabajo de coordinar y delegar, sino que tiene lógica de negocio incorporada y esto conlleva
a tener un modelo de dominio anémico (será ampliado en el apartado 1.6.3.2).
La capa de dominio (o capa de modelo)
También conocida como “capa de negocio”. Se encargará de exponer la lógica de negocio
a las capas de más alto nivel. Aquí encontraremos las reglas de negocio. Esta capa es el
corazón de la aplicación y en ella se representarán:
• Conceptos de negocio.
• Reglas de negocio.
• Información acerca de la situación del negocio.
La capa de infraestructura
Esta capa será la encargada de proporcionar las capacidades técnicas genéricas que
apoyan las capas más altas.
Como conclusión, algunos proyectos no tienen la distinción entre las capas de interface
de usuario y aplicación. Otros tienen múltiples capas de infraestructura. Pero lo importante
es la separación de la capa de dominio que permitirá lo que se conoce como MDA (Model
Driven Design, Diseño Dirigido por el Modelo) [EE03].