Blog de Gonzalo

Principio tell don't ask

El principio tell don't ask consiste en que cuando se realiza la instanciación de un objeto no se debería preguntar sobre las propiedades internas del mismo para llevar a cabo una acción fuera del objeto, sino que se debería dejar la responsabilidad de realizar la acción al objeto en sí y que el mismo objeto compruebe el estado de la propiedad.
Imaginemos que tenemos una tienda y tenemos el la clase producto y queremos controlar el stock de un producto en concreto:


class Producto{
    public $stock;
    
    public function addToCart(){}
}

En el código que no sigue los principios de Tell don't ask toda la acción se realiza fuera del objeto, de este modo:

$producto = new Producto();
if ($producto->stock > 0){
   $producto->addToCart();
}

Para hacerlo bien usando el principio tell don't ask habría que hacerlo así:

class Producto{
    public $stock;
    
    public function addToCart()
    {
       if ($producto->stock > 0){
          $producto->addToCart();
       }
    }
}

$producto = new Producto();
$producto->addToCart();

Gracias a esta buena práctica se ha conseguido encapsular todas las propiedades y acciones del objeto dentro del mismo.