La arquitectura de un sistema se puede ver como un conjunto de estructuras que le dan razón al sistema. Estas estructuras comprenden elementos de software, las relaciones entre ellos y sus propiedades.
La arquitectura en capas es una técnica para organizar el código de un sistema en capas, en donde cada capa usa los servicios de la que está por debajo suyo.
Lo podemos ver como una torta, en donde cada capa descansa sobre la anterior.
La forma comúnmente usada de la arquitectura en capas es con 3 capas.
Debemos desarrollar un sistema para gestionar pedidos en un restaurante.
El sistema debe permitir que los clientes realicen pedidos de comidas y que estos pedidos sean procesados por el personal de cocina.
Planteamos una solución simple en 3 capas, en esta estructura:
presentacion/
: Clases relacionadas con la interacción del usuario, InterfazUsuario
.dominio/
: Clases que representan la lógica de negocio, Pedido
y Chef
.datos/
: Maneja el acceso y manipulación de los datos, representado por la clase Almacen
.main/
: Contiene la clase Restaurante
, que sirve como el punto de entrada principal del programa. La capa Main no la vimos antes, pero se puede ver como un punto de inicio y coordinación del programa, configuración, son las llamadas clases sucias, que conocen todas los paquetes.Presentación
InterfazUsuario.java – Maneja la interacción con el usuario.
public class InterfazUsuario {
private Chef chef;
public InterfazUsuario(Chef chef) {
this.chef = chef;
}
public void realizarPedido(String item) {
Pedido pedido = new Pedido(item);
System.out.println(pedido.describirPedido());
String resultado = chef.prepararComida(pedido);
System.out.println(resultado);
}
}
Dominio
Pedido.java – Representa el pedido del cliente.
public class Pedido {
private String item;
public Pedido(String item) {
this.item = item;
}
public String getItem() {
return item;
}
public String describirPedido() {
return "Pedido recibido para: " + item;
}
}
Chef.java – Encargado de la lógica de negocio, como preparar la comida.
public class Chef {
private Almacen almacen;
public Chef(Almacen almacen) {
this.almacen = almacen;
}
public String prepararComida(Pedido pedido) {
String ingredientes = almacen.obtenerIngredientes(pedido.getItem());
return "Comida preparada con " + ingredientes + " para " + pedido.getItem();
}
}
Datos
Almacen.java – Maneja el acceso a datos, por ejemplo para obtener ingredientes.
public class Almacen {
public String obtenerIngredientes(String item) {
// Simulación de la obtención de ingredientes
return "tomate, queso, masa";
}
}
Main
Restaurante.java – Clase principal que inicia y coordina el sistema.
public class Restaurante {
public static void main(String[] args) {
Almacen almacen = new Almacen();
Chef chef = new Chef(almacen);
InterfazUsuario interfaz = new InterfazUsuario(chef);
interfaz.realizarPedido("pizza");
}
}
Cada clase está asignada a una de las cuatro capas definidas: Presentación, Dominio, Datos y Main.
En resumen, la arquitectura de software de capas es como un edificio bien organizado o una fiesta bien planificada, donde cada elemento tiene su lugar y propósito, trabajando juntos para crear una experiencia armoniosa y funcional.
Imagen de topntp26 en Freepik