Postupná výmena cez spoločné rozhranie (Branch by Abstraction)

Aktualizované Sep 18, 2026

Branch by Abstraction je technika nahradenia závislosti alebo komponentu za spoločným rozhraním. Existujúci volajúci najprv prejdú na abstrakciu. Stará a nová implementácia potom môžu fungovať súčasne, kým sa medzi nimi presúva prevádzka. Systém zostáva počas celej zmeny zostaviteľný a nasaditeľný.

Branch by Abstraction umožňuje nahradiť komponent bez dlhodobej izolácie zmien v samostatnej Git vetve. „Vetva“ vzniká priamo v návrhu kódu: volajúci používajú jedno spoločné rozhranie, za ktorým počas migrácie funguje stará aj nová implementácia.

Postupnosť techniky

Prvá zmena zavádza abstrakciu, ktorá predstavuje to, čo volajúci potrebujú od existujúceho komponentu. Volajúci potom prejdú na túto abstrakciu bez zmeny správania. Až potom, čo je tento krok stabilný, začína sa preberať implementácia náhrady.

KrokAktívna implementáciaHlavná zmenaOverovacie zameranie
PredstaviťIba legacy implementáciaPridať abstrakciuExistujúce správanie zostáva stabilné
Presmerovať volajúcichIba legacy implementáciaSmerovať hovory cez abstrakciuV rozsahu nezostávajú žiadni priami volajúci
Pridať náhraduLegacy aj nová implementáciaImplementovať rovnakú zmluvuVýstupy a vedľajšie účinky možno porovnávať
PrepnutieNová ako predvolenáZmeniť výber implementácieSprávanie za behu zostáva v rámci zmluvy
OdstrániťLen nováOdstrániť starý kód a dočasné prepínačeNezostáva žiadna skrytá závislosť

Feature flags, konfigurácia alebo dependency injection môžu vybrať aktívnu implementáciu. Výberový mechanizmus je dočasná migračná infraštruktúra a potrebuje vlastnú podmienku vyradenia.

Prečo je v starom kóde dôležitá abstrakcia

Legacy volajúci často závisia od implementačných detailov namiesto definovanej zmluvy. Môžu priamo vytvárať inštanciu knižnice, čítať jej tabuľky alebo sa spoliehať na jej chybové hlásenia a načasovanie. Audit legacy codebase identifikuje tieto závislosti predtým, než sa rozhranie vyhlási za stabilné.

Vytvorenie tohto rozhrania je refaktoring, pretože mení vnútornú štruktúru pri zachovaní pozorovateľného správania. Práca môže odhaliť predpoklady, ktoré boli predtým rozptýlené medzi volajúcimi. Tieto predpoklady sa musia stať súčasťou zmluvy alebo sa musia zámerne odstrániť.

Porovnanie starých a nových implementácií

Súbežná prevádzka umožňuje spustiť obe implementácie s rovnakými kontrolovanými vstupmi. Test aktuálneho správania zachytí výsledky starej cesty ešte pred overením náhrady. Pri operáciách iba na čítanie môže tím priamo porovnať výsledky. Operácie s vedľajšími účinkami vyžadujú izoláciu, pretože rovnaký príkaz odoslaný dvakrát môže zdvojiť zápisy, správy alebo externé akcie.

Bezpečný plán porovnávania zaznamenáva:

  • Vstupy. Požiadavky a údaje, ktoré každá implementácia dostane.
  • Výstupy. Vrátené hodnoty, chyby a externe viditeľné odpovede.
  • Vedľajšie účinky. Zmeny databázy, správy, súbory a sieťové hovory.
  • Akceptované rozdiely. Zmeny, ktoré sú zámerné a kontrolované, nie náhodné.

Po dokončení migrácie

Prepnutie nie je dokončené len preto, že väčšina prevádzky používa novú implementáciu. Priame staršie volania, záložné cesty, prevádzkové skripty a vlastníctvo údajov môžu udržať starý komponent pri živote.

Dokončenie znamená, že nová implementácia plní dohodnutú zmluvu, monitoring pokrýva novú cestu a žiadny potrebný proces nezávisí od starej implementácie. Abstrakcia môže zostať, ak predstavuje užitočnú doménovú hranicu. Ak existuje iba kvôli prechodu, jej odstránenie môže zjednodušiť konečný návrh. Táto technika tak umožňuje preberať neznámy kód po etapách a udržať systém medzi zmenami nasaditeľný.