Codigo limpio y refactorización
"No nos llames, nosotros te llamamos". Este principio delega el control principal a un framework o componente de mayor nivel. Es común en frameworks como Spring, Angular, y Django.
Este principio enfatiza la idea de control inverso: en lugar de que un componente de bajo nivel controle el flujo de ejecución, el componente de alto nivel es quien decide cuándo y cómo interactuar con el componente de bajo nivel. Es fundamental en patrones como Inversión de Control (IoC) y Inyección de Dependencias (DI).
¿Cómo Funciona?
-
En el desarrollo tradicional, los componentes de bajo nivel llaman a los componentes de alto nivel para ejecutar ciertas acciones. Esto crea una fuerte dependencia entre ellos, lo que puede dificultar la mantenibilidad y escalabilidad del sistema.
-
Con el principio de Hollywood:
- Los componentes de bajo nivel están registrados o inyectados en los de alto nivel.
- Los componentes de alto nivel deciden cuándo y cómo llamar a los de bajo nivel.
¿Dónde se Aplica?
- Inversión de Control (IoC): Frameworks como Spring o .NET Core gestionan el ciclo de vida de los objetos, inyectándolos según sea necesario.
- Callbacks: Los callbacks en lenguajes como JavaScript siguen este principio: el sistema llama a tu función cuando sucede un evento.
- Patrón Observador: En patrones como el observador, los objetos registrados son notificados por un componente principal cuando ocurre un cambio.
Código Malo
1class Motor { 2 public void encender() { 3 System.out.println("Motor encendido"); 4 Auto auto = new Auto(); 5 auto.notificarEncendido(); 6 } 7} 8 9class Auto { 10 public void notificarEncendido() { 11 System.out.println("El auto ha sido notificado que el motor está encendido"); 12 } 13}
Problema: El flujo de control lo maneja el desarrollador, lo que dificulta la escalabilidad.
Solución: El framework controla el flujo de ejecución, haciendo el código más modular.
- Desacoplamiento: Los componentes de bajo nivel no necesitan saber cómo funcionan los de alto nivel.
- Flexibilidad: Es fácil reemplazar o modificar los componentes de bajo nivel sin afectar el resto del sistema.
- Reutilización: Los componentes de bajo nivel son más reutilizables, ya que no dependen de implementaciones específicas.
- Escalabilidad: Facilita la integración de nuevos componentes sin afectar los existentes.
Código Bueno
1class Motor { 2 public void encender() { 3 System.out.println("Motor encendido"); 4 } 5} 6 7class Auto { 8 private Motor motor; 9 10 public Auto(Motor motor) { 11 this.motor = motor; 12 } 13 14 public void iniciar() { 15 System.out.println("Iniciando el auto..."); 16 motor.encender(); // El Auto llama al Motor 17 System.out.println("El auto está funcionando"); 18 } 19} 20 21public class PrincipioHollywood { 22 public static void main(String[] args) { 23 Motor motor = new Motor(); 24 Auto auto = new Auto(motor); 25 auto.iniciar(); 26 } 27}
- Loading...