La arquitectura de software

Tipos de aplicaciones

De forma general, se puede realizar una gran división, estableciendo así dos grandes tipos de aplicaciones:

  • aplicaciones con interfaz para el usuario
  • aplicaciones de servicios

Aplicaciones con interfaz para el usuario

Estas aplicaciones se caracterizan por tener contacto directo con un usuario real, por lo que tienen que presentar por pantalla algún modo de interactuar con él. Existe diversa varidad de interfaces posibles para el usuario:

  • intefaces nativas del sistema operativo (ventana, botones, etc.)
  • interfaces Swing (ventanas, botones del kit de Java)
  • interfaces de línea de comandos (la "consola de DOS")
  • interfaces web (páginas web abiertas por un navegador de internet)

En JEE es común el desarrollo de interfaces web, por diversos motivos de mantenimiento y deploy.

Aplicaciones de servicios

Los servicios son funcionalidad expuesta por un sistema, pero no pensadas para ser utilizadas directamente por una persona. Por ejemplo, un servicio podría ser un facturador que corre de noche en forma automática, sin intervención de un usuario.
Por otro lado, una aplicación con interfaz de usuario podría usar una aplicación de servicios para obtener ciertos datos, o realizar operaciones.
En este curso crearemos una aplicación de servicios.

Arquitectura de 3 capas

Las aplicaciones JEE suelen seguir una arquitectura de 3 capas (también conocida como Modelo 2).
La arquitectura se basa entonces en 3 capas principales:

  • Capa de presentación
  • Capa de lógica de negocio
  • Capa de acceso a datos

Capa de presentación

Esta capa resuelve la presentación de datos al usuario. Esta capa se encarga entonces de "dibujar" las pantallas de la aplicación al usuario, y tomar los eventos que el cliente genere (por ejemplo, el hacer click en un botón).
Existen numerosas tecnologías para esta capa (JSP, Struts, JSF, Flex, Velocity, Wicket, GWT, etc, etc), cada una con sus ventajas y desventajas.
En este curso crearemos un servicio sin presentación, por lo que esta capa no será utilizada para el curso.

Capa de lógica de negocio

Esta capa resuelve la lógica de la aplicación. Contiene los algoritmos, validaciones y coordinación necesaria para resolver la problemática.
Los elementos fundamentales de esta capa son los objetos de dominio. Estos objetos representan los objetos principales del negocio. Son simples objetos que sólo contienen los datos que representan (por ejemplo, un Cliente, una Factura, una Direccion, un Producto).
La lógica para manipularlos se encuentra en los llamados objetos de negocio (Service Object, o también a veces Business Object). Estos objetos contienen la lógica del negocio, y manipulan a los objetos de dominio. A su vez, estos son los objetos que exponen métodos que se transforman en el contrato de la capa de lógica de negocio.
Los Service Object constan de una interfaz (dónde se expone la lógica del negocio) y una clase que la implementa.

Capa de acceso a datos

Esta capa resuelve el acceso a datos, abstrayendo a su capa superior de la complejidad del acceso e interacción con los diferentes orígenes de datos.
Esta capa se encarga de proveer un API simple de usar, orientado al negocio, sin exponer complejidades propias de un repositorio de datos.
En esta capa se resuelven:

  • cualquier acceso a la base de datos
  • cualquier acceso a filesystem
  • cualquier acceso a otros sistemas
  • cualquier acceso a un repositorio de datos en cualquier forma.

Estos objetos se construyen a partir del patrón Data Access Object (DAO). Los DAO constan de una interfaz (dónde se expone la lógica de acceso a datos) y una clase que la implementa.

En el curso estos objetos serán implementados con clases denominadas "Repository".

En este capítulo veremos la arquitectura de software general de las aplicaciones, la cual será usada para el proyecto del curso.