mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-15 12:59:00 +00:00
dc7495e8bd
* Typo corrections * bridge pattern translated to spanish * builder pattern translated to spanish * context-object pattern translated to spanish * converter pattern translated to spanish * dependency injection pattern translated to spanish * factory pattern translated to spanish * factory-kit pattern translated to spanish * factory-method pattern translated to spanish * monostate pattern translated to spanish * multiton pattern translated to spanish * object mother pattern translated to spanish * object pool pattern translated to spanish * property pattern translated to spanish * prototype pattern translated to spanish * registry pattern translated to spanish * step builder pattern translated to spanish * value object pattern translated to spanish * typo corrections and resources urls refactor * grammar corrections * Add image to each pattern --------- Co-authored-by: luismateoh <luismateohm@gmail.com> Co-authored-by: luis.hincapie <luis.hincapie@blankfactor.com>
97 lines
3.1 KiB
Markdown
97 lines
3.1 KiB
Markdown
---
|
|
title: Layers
|
|
category: Architectural
|
|
language: es
|
|
tag:
|
|
- Decoupling
|
|
---
|
|
|
|
## 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*).
|
|
|
|
```java
|
|
@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.
|
|
|
|
```java
|
|
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.
|
|
|
|
```java
|
|
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.
|
|
|
|
## Créditos
|
|
|
|
* [Pattern Oriented Software Architecture Volume 1: A System of Patterns](https://www.amazon.com/gp/product/0471958697/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0471958697&linkCode=as2&tag=javadesignpat-20&linkId=e3f42d7a2a4cc8c619bbc0136b20dadb)
|