Nikdy neprerábajte celý web. Iba niekedy.

Michal Jirák nedávno napísal skvelý článok, prečo by ste nikdy nemali prerábať celý web. Je to radosť čítať, pretože človek v niektorých bodoch vidí sám seba.

Nastanú však situácie, kedy si už nemôžete povedať staré známe "Funguje to? Tak sa toho nechytaj!", pretože raz-dva to môže byť inak.

Najprv dbajte na bezpečnosť

Myslím, že v PHP nie je horšej chyby, ako SQL injection a keď vidím kód, v ktorom je na prvý pohľad SQL injection, tak sa mi, ako sa vraví, nožík vo vrecku otvára.

Nuž posúďte v nasledujúcich riadkoch.

<?php

// zlý kód (tzv. kokód)

$query = "INSERT INTO `comment` (`text`, `created`, `approved`)
VALUES ('" . $_POST['text'] . "', " . time() . ", 1);";

mysql_query($query);

To je len malá ukážka, lebo nie o kódoch má byť tento článok.

Čo však v takomto prípade robiť? Máte dve možnosti, a jednu si proste vybrať musíte.

  1. Prepíšete ten kód.
  2. Prepíšete ten kód.

Všade dopisovať mysql_real_escape_string sa vám asi nechce a určite by ste na nejaké miesto zabudli. Jedine, žeby nie.

V takomto prípade je najlepšie použiť nejakú knižnicu, ktorá to má vyriešené, prípadne prepared statements. True story.

Zapamätajte si hlavne to, že nech je aplikácia akákoľvek stará, musí byť bezpečná, pretože vaše dáta sú to jediné, čo máte a určite nechcete o ne prísť, alebo ich na mávnutie rukou dať nejakej tretej strane.

Je nahovno celý web

Ak je už vaša aplikácia bezpečná, no predsa ju chcete prerobiť, určite naraz neprerábajte všetko. Nájdite si časť, na ktorej budete stavať - od ktorej sa bude všetko nové odvíjať.

Ideálne je, keď je tou časťou databáza. Prečo? Lebo dáta ostanú nedotknuté a zmeníte len spôsob práce s nimi. Napíšete si nové modely, použijete databázovú abstrakciu, dorobíte cacheovanie a podobne.

Je to však taktiež beh na dlhé trate.

Nové už chcem dobré

Starý web funguje, nechcete sa ho chytať, no nové fíčurky by ste už chceli spraviť tak, ako sa má. Nielen preto, že ste pedant (ako inak, samozrejme), ale i preto, že dorobenie do starého systému by trvalo tak dlho, že by ste zatiaľ napísali nový, no nemáte na to čas.

A včuľ buď múdry, Vlado.

Mať dve aplikácie, z ktorých každá sa stará o niečo iné? Áno, aj takto môžete fungovať. Aplikácie prepojíte tak, že si napíšete API, cez ktoré budú komunikovať.

Nebojte sa rozdeľovať. Čím menej centralizácie, tým lepšie.

Databáza nakoniec

Ak ste do databázy moc nezasahovali, mali by ste byť v stave, že máte dve aplikácie, ktoré sú schopné pracovať nad jednou databázou. Ak vám v novej niečo nefunguje, máte možnosť to v kľude opraviť. Nesmie sa vám stať, že to, čo v starej išlo, v novej nepôjde, lebo potom to nevyzerá ako upgrade, ale downgrade.

Ak vám obidve aplikácie bežia naraz a fungujú, tak môžete dať dokonca užívateľom na výber a zistiť, ako sa im nová verzia páči. Argumentom môže byť výrazné zrýchlenie.

Na záver

Ak už niečo prerábate, skúste ísť postupne, pomaly.

  1. Bezpečnosť nadovšetko
  2. Radšej prerábať len časti
  3. Databáza až nakoniec

Všetky tieto metódy sa dajú aplikovať postupne, po celkoch, tak ako sú, prípadne zobrať vždy "z každého rožku, trošku" a pri dorábaní novej funkcionality spraviť i menší refaktoring a pomaly sa tak zbavovať sračiek (doslova).