Similitudes con la programación basada en eventos

Wikipedia define la programación reactiva de la siguiente manera:
«Un paradigma de programación orientado a los flujos de datos y la propagación del cambio».

La primera idea de esto puede implicar algunas similitudes con una programación basada en eventos bien conocida. Los datos fluyen y la propagación del cambio suena un poco como algo que puede implementarse a través de \SplSubject, \SplObjectStorage, y \SplObserver interfaces en PHP, según el siguiente ejemplo trivial. La interfaz \SplObjectStorage encapsula aún más el \Countable, \Iterator, Interfaces \Traversable, \Serializable y \ArrayAccess:

<?php
class UserRegister implements \SplSubject
{
protected $user;
protected $observers;
public function __construct($user)
{
$this->user = $user;
$this->observers = new \SplObjectStorage();
}
public function attach(\SplObserver $observer)
{
$this->observers->attach($observer);
}
public function detach(\SplObserver $observer)
{
$this->observers->detach($observer);
}
public function notify()
{
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
public function getUser()
{
return $this->user;
}
}
class Mailer implements \SplObserver
{
public function update(\SplSubject $subject)
{
if ($subject instanceof UserRegister) {
echo 'Mailing ', $subject->getUser(), PHP_EOL;
}
}
}
class Logger implements \SplObserver
{
public function update(\SplSubject $subject)
{
if ($subject instanceof UserRegister) {
echo 'Logging ', $subject->getUser(), PHP_EOL;
}
}
}
$userRegister = new UserRegister('John');
// some code…
$userRegister->attach(new Mailer());
// some code…
$userRegister->attach(new Logger());
// some code…
$userRegister->notify();

Podemos decir que los flujos de datos se traducen en una secuencia de actualizaciones provenientes del método notify() de la instancia $userRegister, la propagación del cambio se traduce en la activación del método update() de las instancias de correo y registrador, y el método \SplObjectStorage juega un papel importante, esto es solo un trivial y superficial interpretación del paradigma de programación reactiva en el contexto del código PHP.
Además, no hay asincronía aquí en este momento. El tiempo de ejecución de PHP y la biblioteca estándar ofrecen efectivamente todo lo que se necesita para escribir código asincrónico. Lanzar una reactividad en la mezcla es simplemente una cuestión de elegir la biblioteca correcta.
Si bien la elección de las bibliotecas PHP para la programación reactiva no es tan rica como las del ecosistema JavaScript, hay algunas que son notables, como RxPHP y React.

Comparte