PHP: el patrón Puente/Bridge, cuando se usa y cómo se hace

2022-01-31 - Categorías: General / PHP / Principios y patrones
Pieces, design patterns, principles, patrones de diseño

Otro patrón de diseño del software es el llamado Puente o Bridge en inglés. Se trata de una forma de refactorizar los códigos fuentes para que tengan bajo acoplamiento y alta cohesión, distribuyendo las características y haciendo más manejable todo el programa en su conjunto.

Es más fácil verlo para entender en qué consiste exactamente.

Punto de partida, tenemos muchos conceptos que varían entre sí muy poco

Herencia de clases entre vehículos

Por ejemplo supongamos que estamos trabajando con vehículos. Si ahora queremos añadir el color al esquema anterior, o un tipo de motor nuevo híbrido, deberíamos de ir añadiendo clases exponencialmente.

La forma de solucionar este problema haciendo más mantenible el código fuente es hacer clases puente.

Extendiendo funcionalidades usando puentes

Por ejemplo, podemos hacer un puente con los colores, y otro con los motores. El de los colores nos podría quedar algo tal que así:

El puente con los tipos de motores podría ser algo tal que así:

Sin usar puentes tendríamos que haber hecho una clase para cada combinación de características:

  • Coche rojo eléctrico.
  • Coche rojo híbrido.
  • Coche rojo gasolina.
  • Coche verde eléctrico.
  • Coche verde híbrido.
  • Coche verde gasolina.
  • Coche azul eléctrico.
  • Coche azul híbrido.
  • Coche azul gasolina.
  • Moto rojo eléctrico.
  • Moto rojo híbrido.
  • Moto rojo gasolina.
  • Moto verde eléctrico.
  • Moto verde híbrido.
  • Moto verde gasolina.
  • Moto azul eléctrico.
  • Moto azul híbrido.
  • Moto azul gasolina.
  • Camión rojo..
  • Etcétera.

A la larga, hacer una clase para cada tipo no es mantenible, la solución es hacer los citados puentes.

Programando estos puentes en PHP

Todo esto anterior, se traduce en algo tal que así, por ejemplo una clase src/Bridge/Vehicle.php:

<?php

interface Vehicle extends Color, Motor
{
}

La clase src/Bridge/Color.php:

<?php

interface Color
{
}

La clase src/Bridge/Motor.php:

<?php

interface Motor
{
}

Los tres colores src/Bridge/Red.php, src/Bridge/Green.php y src/Bridge/Blue.php:

<?php

class Red implements Color
{
}
<?php

class Green implements Color
{
}
<?php

class Blue implements Color
{
}

Las clases para los tipos de motores src/Bridge/MotorElectric.php, src/Bridge/MotorGasoil.php o src/Bridge/MotorHybrid.php:

<?php

class MotorElectric implements Motor
{
}
<?php

class MotorGasoil implements Motor
{
}
<?php

class MotorHybrid implements Motor
{
}

Y las clases para src/Bridge/Car.php, src/Bridge/Motorbike.php y src/Bridge/Truck.php:

<?php

class Car implements Vehicle
{
}
<?php

class Motorbike implements Vehicle
{
}
<?php

class Truck implements Vehicle
{
}

Y así sucesivamente, tendremos el código poco acoplado y bien cohesionado para darle un buen mantenimiento.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

 

© 2022 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.