¿Listo para dominar la API de WhatsApp?
Empieza gratis hoy en WhatzMeApi.com 🚀
1) Conceptos clave
- Encapsulamiento: estado privado, métodos públicos.
- Abstracción: define qué hace, no cómo.
- Herencia: úsala poco; prefiere composición.
- Polimorfismo: interfaces para variar comportamientos.
2) Modela bien el dominio
- Entidad: identidad estable (id).
- Value Object: por valor, inmutable (usa
record
).
public record Money(BigDecimal amount, Currency currency) {
public Money {
if (amount.signum() < 0) throw new IllegalArgumentException();
}
}
3) Ejemplo mínimo con estrategia (polimorfismo)
interface DiscountPolicy { Money apply(Money total); }
final class PercentageDiscount implements DiscountPolicy {
private final BigDecimal pct; // 0..1
PercentageDiscount(BigDecimal pct){ this.pct=pct; }
public Money apply(Money t){ return new Money(t.amount().multiply(BigDecimal.ONE.subtract(pct)), t.currency()); }
}
final class NoDiscount implements DiscountPolicy {
public Money apply(Money t){ return t; }
}
Cambias la regla creando otra clase que implemente
DiscountPolicy
sin tocar el resto del código.
4) Principios que sí importan
- SRP: una clase, un motivo de cambio.
- OCP: agrega reglas nuevas sin editar las existentes.
- DIP: depende de interfaces; inyecta implementaciones.
5) Antipatrones a evitar
- Anemic Model: objetos con solo getters/setters.
- God Object: una clase que hace todo.
- Herencia por defecto: usa composición primero.
6) Checklist para tu próximo PR
- ¿Usaste interfaces para reglas que cambian?
- ¿Value Objects inmutables donde aplica?
- ¿Clases con una responsabilidad?
- ¿Tests unitarios del dominio (sin levantar Spring)?
7) Plan en 3 pasos
- Identifica una regla variable (p. ej., descuento).
- Extrae interfaz + 2 estrategias (
NoDiscount
,PercentageDiscount
). - Crea 3 tests de dominio que validen el comportamiento.
¿Listo para dominar la API de WhatsApp?
Empieza gratis hoy en WhatzMeApi.com 🚀