Layers
Propósito
Capas (Layers en inglés) es un patrón arquitectónico donde las responsabilidades del software se dividen entre diferentes
capas de la aplicación.
Explicación
Ejemplo del mundo real
Considere un sitio web que muestra pasteles decorados para bodas y similares. En lugar de que la página web
acceda directamente a la base de datos, depende de un servicio para entregar esta información. Luego, el
servicio consulta la capa de datos para recopilar la información necesaria.
En otras palabras
Con el patrón arquitectónico de Capas, diferentes responsabilidades residen en capas separadas. La capa de vista solo
está interesada en la renderización, la capa de servicio ensambla los datos solicitados de varias fuentes, y
la capa de datos obtiene la información del almacenamiento de datos.
Wikipedia dice
En ingeniería de software, la arquitectura de varios niveles multitier (a menudo referida como arquitectura n-tier) o
arquitectura multicapa es una arquitectura cliente-servidor en la que las funciones de presentación, procesamiento de aplicaciones
y gestión de datos están físicamente separadas.
Ejemplo programático
En la capa de datos, guardamos nuestros elementos básicos. Cake
consta de capas (layers) y cobertura (topping).
@Entity
public class Cake {
@Id
@GeneratedValue
private Long id;
@OneToOne(cascade = CascadeType.REMOVE)
private CakeTopping topping;
@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER)
private Set<CakeLayer> layers;
}
La capa de servicio ofrece CakeBakingService
para un fácil acceso a diferentes aspectos de los pasteles.
public interface CakeBakingService {
void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException;
List<CakeInfo> getAllCakes();
void saveNewTopping(CakeToppingInfo toppingInfo);
List<CakeToppingInfo> getAvailableToppings();
void saveNewLayer(CakeLayerInfo layerInfo);
List<CakeLayerInfo> getAvailableLayers();
}
En la parte superior tenemos nuestra View
, responsable de renderizar los pasteles.
public interface View {
void render();
}
@Slf4j
public class CakeViewImpl implements View {
private final CakeBakingService cakeBakingService;
public CakeViewImpl(CakeBakingService cakeBakingService) {
this.cakeBakingService = cakeBakingService;
}
public void render() {
cakeBakingService.getAllCakes().forEach(cake -> LOGGER.info(cake.toString()));
}
}
Diagrama de clases
Aplicabilidad
Utilice la arquitectura de Capas cuando:
- Quiera dividir claramente las responsabilidades del software en diferentes partes del programa.
- Quiera evitar que un cambio se propague a lo largo de la aplicación.
- Quiera hacer su aplicación más mantenible y testeable.