Ugrás a tartalomra
Rapcsány Krisztián Rapcsány Krisztián
← Összes cikk
2 perc olvasás

Legacy rendszer újraírása működés közben

Legacy Laravel Architektúra

Egy fogászati rendszert írok újra fokozatosan, funkciónként, Laravelre. A rendelők közben dolgoznak, ezért nem engedhetem meg, hogy "majd egyszer átállunk".

A cél az azonos viselkedés, nem a jobb

Újraírásnál az első ösztön az, hogy mindent jobban csinálok. Itt ez rossz ösztön. A rendelők megszokták a működést, ezért az új rendszernek ugyanúgy kell viselkednie, mint a réginek. Ahol eltér, azt le kell írni.

Vezetek egy listát arról, hol tér el az új a régitől, mi hiányzik még, és mit csinálok szándékosan másképp. Ez a lista a legfontosabb dokumentum az egész újraírásban.

Több rendelő, egy adatbázis

A rendszer több bérlős: minden rendelő egy sor, és szinte minden lekérdezés a rendelő azonosítójára szűr. Ezt nem lehet utólag hozzátoldani, ezért az új kódban az elejétől így építem.

Napló az érzékeny adatokhoz

Egészségügyi adatnál tudnom kell, ki mit módosított. A változásnapló minden modell módosítását mezőszinten rögzíti, a régi rendszer naplójának mintájára, de PostgreSQL jsonb-vel, havi bontású táblával és sorban írva, hogy ne lassítsa a rendszert.

ChangeAuditor.php
/** Temporarily disable logging, e.g. during a bulk import or seeding. */
public static function withoutLogging(callable $callback): mixed
{
    $previous = self::$paused;
    self::$paused = true;

    try {
        return $callback();
    } finally {
        self::$paused = $previous;
    }
}

/** On `updating`, keep the original row in memory, so no extra SELECT is needed. */
public function captureOriginal(Model $model): void
{
    if (! $this->enabled($model)) {
        return;
    }

    $this->originals[spl_object_id($model)] = $model->getOriginal();
}

Kivonat valódi kódból, anonimizálva.

Az eredeti sort a memóriából veszi, ezért nincs hozzá plusz lekérdezés. Tömeges import vagy feltöltés közben a naplózás szüneteltethető.

Hasonló problémán dolgozol?

Ha elakadtál, vagy átnéztetnéd a megoldásodat, írj, szívesen megnézem.

Írok neked →
Ajánlatot kérek →