En base a unos specs definidos se desarrolle un diagrama de clases.
Feature
Crear un módulo que permita personalizar las comisiones de método de pago por usuario y por evento, para el cálculo de los totales de una
reservación con X cantidad de boletos.
Criterios de Aceptación
Dado que se tienen comisiones por default por método de pago, Cuando
se tiene 1 boleto X con valor 500, Entonces calcular el costo final de
la reservación.
Dado que se tienen comisiones por default por método de pago, cuando se tiene un boleto X con valor 500, y se quieren personalizar las comisiones por usuario, entonces calcular el costo final de la reservación en base a las nuevas comisiones por usuario.
Dado que se tienen comisiones por default por método de pago, cuando se tiene un boleto X con valor 500, y se quieren personalizar las comisiones por evento, entonces calcular el costo final de la reservación en base a las nuevas comisiones por evento.
Dado que se tienen comisiones por usuario crear en base a éstas, comisiones por evento, entonces calcular el costo final de la reservación en base a las nuevas comisiones por evento.
Dado que un usuario crea una reservación, cuando selecciona un método de pago, entonces calcular el costo final de la reservación, considerando la comisiones ya sea por evento o por usuario.
En general:
Creación de un módulo escalable y dinámico para creación de comisiones para múltiples métodos de pago por usuario o por evento.
¿Qué se busca?, Responder las siguientes preguntas:
Un diagrama de clases que resuelva el problema:
1. ¿Qué objetos necesito para resolverlo? ¿cuáles son las responsabilidades de cada objeto?
2. La parte que más va a cambiar de este código es probablemente la que nos permite agregar comisiones personalizadas de los método de pago por evento o por usuario. Qué diseño y qué objetos debemos tener para que esto sea fácil.
3. Al final debe ser un módulo/paquete independiente, es decir que si yo quisiera darle portabilidad a esta solución la pueda incluir como una gema, librería, paquete sin tener que re-programarla desde cero.
NOTA: El diseño debe considerar que el módulo será usado en servicios independientes.