Legacy rendszer újraírása működés közben
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.
/** 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 →További cikkek
Nagy fájlok feltöltése megszakadás nélkül Laravelben
Hogyan oldottam meg a nagy videók feltöltését úgy, hogy egy megszakadt kérés ne vigye el az egész feltöltést.
Elolvasom →Hogyan ne küldj rossz levelet rossz embernek
Az e-mail kampányoknál a küldés a könnyű rész. Ezek azok a védelmi rétegek, amiket a saját rendszerembe építettem.
Elolvasom →