Eine Abstraktion schaffen
Wir schaffen eine Abstraktion in Form der Klasse Library
mit einer statischen Methode add()
. Normalerweise vermeide ich statische Methoden, wo es nur geht, in diesem Fall möchte ich aber den Aufruf so einfach wie möglich machen. Wir können in einer Legacy-Anwendung schließlich nicht davon ausgehen, dass wir Objekte haben, die uns Dependency Injection erlauben.
<?php declare(strict_types=1);
namespace spriebsch\tfd\softwareModernisation\branchByAbstraction\encapsulateLegacyPages\abstraction;
$a = 1;
$b = 2;
Library::add($a, $b);
class Library
{
public static function add(int $a, int $b): void
{
require __DIR__ . '/calculator.php';
}
}
Schauen wir mal, ob das noch funktioniert:
3
Das Ganze funktioniert übrigens deshalb, weil in PHP die innerhalb der Funktion add()
aufgerufene Datei calculator.php
die lokalen Variablen $a
und $b
als globale Variablen übernimmt.
Aktuell hat die Methode add()
noch den Rückgabetyp void
. Die direkte Ausgabe in calculator.php
ist ein klassischer Seiteneffekt. Seiteneffekte sollten wir nach Möglichkeit vermeiden, weil wir sie der Signatur einer Methode nicht ansehen können, sondern in die Implementierung schauen müssten, um sie zu erkennen.
In unserem einfachen Beispiel hier könnten wir die Addition vermutlich direkt in die Bibliotheksfunktion verschieben. Wir stellen uns aber vor, dass in calculator.php
in Wirklichkeit noch viel mehr passiert und das daher nicht so ganz einfach ist. Also machen wir so kleine Schritte, wie wir sie in einem sehr komplexen Beispiel machen würden.
Im nächsten Schritt wollen wir den Seiteneffekt loswerden.