Spring til indhold

Har implementeret en katalogdrevet deep‑merge

Har implementeret en katalogdrevet deep‑merge for lagrede JSON‑præferencer, hvilket forhindrer nedbrud på grund af manglende nøgler, når skemaet udvikler sig.

  • Puzzle pieces, puzzle, share
    Foto: congerdesign / Pixabay
  • Zipper, wallet, cramp
    Foto: Myriams-Fotos / Pixabay

gemte indstillinger, der overlever en skemaændring

Situation. Platformen gemmer JSON‑præferencer — notifikationsindstillinger og den slags — som en brugers gemte værdier lagt oven på et sæt standardværdier. Den oprindelige merge gjorde det på ét niveau. Problemet viser sig senere: tilføjer man en ny nøgle til standardværdierne, har rækker, der blev gemt, før nøglen fandtes, den simpelthen ikke. Så læser noget klientkode feltet, får undefined og går ned — for netop de brugere, der har været med længst.

Opgave. Det skulle være sikkert at videreudvikle præferenceskemaet, så en ny indstilling aldrig kunne ødelægge noget for dem, der havde tilmeldt sig, før den fandtes.

Handling. Mergen på ét niveau blev erstattet af en deep merge, der bruger standardværdierne som katalog. Standardværdierne behandles som den autoritative liste over alle de nøgler, der skal findes; brugerens gemte værdier merges rekursivt ovenpå, så alt, hvad der står i kataloget, med garanti er til stede i resultatet, uanset om det fandtes i den gemte blob. Tilføjer man en nøgle til standardværdierne, dukker den automatisk op i de effektive præferencer for alle eksisterende rækker, indlejrede nøgler inklusive. Ændringen blev rullet ud via en migrering, så eksisterende data fik gavn af den med det samme i stedet for at skulle vente på at blive skrevet om.

Resultat. Præferencer kan vokse uden frygt. En ny indstilling risikerer ikke længere at få klienten til at gå ned på et undefined‑felt, og frontenden holdt op med at have brug for defensive tjek spredt ud over alle de steder, hvor den læser en præference. Det gav også resten af platformen en pålidelig måde at udvide enhver gemt JSON‑blob på — selve mønsteret, ikke kun den ene rettelse.

Ét stykke af en længere fortegnelse — og det hele ligger her på sitet.

Hver post er skrevet på samme måde: situationen, opgaven, hvad vi gjorde, og hvad der ændrede sig.

Se hele fortegnelsen