Una vez creada nuestra pequeña arquitectura, tan solo tenemos que implementar las clases que modificaran la prioridad de visualización de la película.
En este ejemplo, se implementa la clase estreno, que determina si la película es de tipo estreno, entonces variará la propiedad prioridad.
amespace App\ArrayMap\Estreno;
use App\Interfaces\RuleInterface;
use App\Rule;
class Estreno extends Rule implements RuleInterface
{
const prioridadMin = 0;
public function map(array $arrayElements) : array
{
return array_map(function ($e) {
if ($e->bloqueante()) {
// según esten definidos los requisitos
$e->prioridad = $e->prioridad - 2;
if ($e->prioridad < self::prioridadMin) {
$e->prioridad = self::prioridadMin;
}
}
return $e;
}, $arrayElements);
}
}
namespace App\ArrayMap\Descripcion;
use App\Interfaces\RuleInterface;
use App\Rule;
class Descripcion extends Rule implements RuleInterface
{
const prioridadMin = 0;
public function map(array $arrayElements) : array
{
return array_map(function ($e) {
// según esten definidos los requisitos
if (strlen($e->descripcion()) > 100 && strlen($e->descripcion()) < 500) {
$e->prioridad = $e->prioridad - 0.5 ;
} elseif (strlen($e->descripcion()) > 500) {
$e->prioridad = $e->prioridad - 0.7 ;
} elseif (strpos($e->descripcion(), '</a>') !== false) {
$e->prioridad = $e->prioridad - 0.5 ;
}
if ($e->prioridad < self::prioridadMin) {
$e->prioridad = self::prioridadMin;
}
return $e;
}, $arrayElements);
}
}
Dejo que termines la clase asociada al título.
Como ves, superar una prueba técnica PHP es de lo más entrenido. Las variantes como ya comenté, suelen tener además tests unitarios cuyas aserciones, deben ser cumplidas todas. En esto último, el nivel de precisión debe ser casi excelente.
Espero que hayais disfrutado con este post, al igual que yo escribíendolo. Podeís clonar el repositorio
de reglas en Rules-Filter
Os dejo un librito recomendado. Que aproveche !
fdo: roberto manchado
Top comments (0)