mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-06-03 18:13:30 +00:00
translation: Translate to Spanish (#2894)
* Translate Iterator pattern to Spanish * Translate to Spanish: Servant pattern Sharding pattern Spatial-partition pattern Special-case pattern specification pattern State pattern Strategy pattern Subclass-case pattern * Update language to es * Fixing Missing translation * Translate to Spanish: template method pattern throttling pattern trampoline pattern transaction-script pattern type object pattern Update method pattern visitor pattern * Fixing Missing translation
This commit is contained in:
committed by
GitHub
parent
1a50353b49
commit
d45dcb1a63
@@ -0,0 +1,117 @@
|
||||
---
|
||||
title: Transaction Script
|
||||
category: Behavioral
|
||||
language: es
|
||||
tag:
|
||||
- Data access
|
||||
---
|
||||
|
||||
## Propósito
|
||||
|
||||
Transaction Script organiza la lógica de negocio por procedimientos donde cada procedimiento maneja una única
|
||||
solicitud de la presentación.
|
||||
|
||||
## Explicación
|
||||
|
||||
Ejemplo del mundo real
|
||||
|
||||
> Necesitas crear un sistema de reservas de habitaciones de hotel. Dado que los requisitos son bastante simples
|
||||
> utilizar el patrón Transaction Script.
|
||||
|
||||
En palabras sencillas
|
||||
|
||||
> Transaction Script organiza la lógica de negocio en transacciones que el sistema necesita llevar a cabo.
|
||||
|
||||
Ejemplo programático
|
||||
|
||||
La clase `Hotel` se encarga de reservar y cancelar las reservas de habitaciones.
|
||||
|
||||
```java
|
||||
@Slf4j
|
||||
public class Hotel {
|
||||
|
||||
private final HotelDaoImpl hotelDao;
|
||||
|
||||
public Hotel(HotelDaoImpl hotelDao) {
|
||||
this.hotelDao = hotelDao;
|
||||
}
|
||||
|
||||
public void bookRoom(int roomNumber) throws Exception {
|
||||
|
||||
Optional<Room> room = hotelDao.getById(roomNumber);
|
||||
|
||||
if (room.isEmpty()) {
|
||||
throw new Exception("Room number: " + roomNumber + " does not exist");
|
||||
} else {
|
||||
if (room.get().isBooked()) {
|
||||
throw new Exception("Room already booked!");
|
||||
} else {
|
||||
Room updateRoomBooking = room.get();
|
||||
updateRoomBooking.setBooked(true);
|
||||
hotelDao.update(updateRoomBooking);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelRoomBooking(int roomNumber) throws Exception {
|
||||
|
||||
Optional<Room> room = hotelDao.getById(roomNumber);
|
||||
|
||||
if (room.isEmpty()) {
|
||||
throw new Exception("Room number: " + roomNumber + " does not exist");
|
||||
} else {
|
||||
if (room.get().isBooked()) {
|
||||
Room updateRoomBooking = room.get();
|
||||
updateRoomBooking.setBooked(false);
|
||||
int refundAmount = updateRoomBooking.getPrice();
|
||||
hotelDao.update(updateRoomBooking);
|
||||
|
||||
LOGGER.info("Booking cancelled for room number: " + roomNumber);
|
||||
LOGGER.info(refundAmount + " is refunded");
|
||||
} else {
|
||||
throw new Exception("No booking for the room exists");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
La clase `Hotel` tiene dos métodos, uno para reservar y otro para cancelar una habitación respectivamente. Cada uno de ellos
|
||||
transacción en el sistema, haciendo que `Hotel` implemente el patrón Transaction Script
|
||||
Transaction Script.
|
||||
|
||||
El método `bookRoom` consolida todos los pasos necesarios como comprobar si la habitación ya está reservada
|
||||
o no, si no está reservada entonces reserva la habitación y actualiza la base de datos utilizando el DAO.
|
||||
|
||||
El método `cancelRoom` consolida pasos como comprobar si la habitación está reservada o no,
|
||||
si está reservada, calcula el importe del reembolso y actualiza la base de datos utilizando el DAO.
|
||||
|
||||
## Diagrama de clases
|
||||
|
||||

|
||||
|
||||
## Aplicabilidad
|
||||
|
||||
Utilice el patrón Transaction Script cuando la aplicación tenga sólo una pequeña cantidad de lógica y esa
|
||||
lógica no será extendida en el futuro.
|
||||
|
||||
## Consecuencias
|
||||
|
||||
* A medida que la lógica de negocio se complica,
|
||||
se hace progresivamente más difícil mantener el script de transacción
|
||||
en un estado bien diseñado.
|
||||
* Puede ocurrir duplicación de código entre scripts de transacciones.
|
||||
* Normalmente no es fácil refactorizar el script de transacciones a otros patrones de lógica de dominio.
|
||||
del dominio.
|
||||
|
||||
## Patrones relacionados
|
||||
|
||||
* Domain Model
|
||||
* Table Module
|
||||
* Service Layer
|
||||
|
||||
## Créditos
|
||||
|
||||
* [Transaction Script Pattern](https://dzone.com/articles/transaction-script-pattern#:~:text=Transaction%20Script%20(TS)%20is%20the,need%20big%20architecture%20behind%20them.)
|
||||
* [Transaction Script](https://www.informit.com/articles/article.aspx?p=1398617)
|
||||
* [Patterns of Enterprise Application Architecture](https://www.amazon.com/gp/product/0321127420/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=0321127420&linkId=18acc13ba60d66690009505577c45c04)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 65 KiB |
Reference in New Issue
Block a user