Extremely defensive PHP – střípky z WebExpo 2016

Extremely defensive PHPJako většina nadšených vývojářů jsem se i já zařadil mezi návštěvníky mezinárodní konference o tvorbě webu WebExpo 2016 v Praze. Letos dokonce jako zástupce tisku s vysačkou označenou „Press“. Jako jednu z nejzajímavějších přednášek o programování bych označil přednášku na téma Extremely defensive PHP.

WebExpo2016 vysačka

Extremely defensive PHP není žádná nová technologie, ale způsob programování v PHP. Jedná se tedy o poměrně agresivní vývojovu techniku, která nám říká jak psát kód a je vhodná spíše pro větší a dlouhodobější projekty.

Tato technika vychází ze dvou hlavních myšlenek

  • Everyone is dump – všichni jsou hloupí
  • Code is crap – kód je špatný

Všichni jsou hloupí

Vychází z defensive driving (defenzivní řízení automobilu), kdy řidič automaticky předpokládá, že ostatní udělají chybu a snaží se řídit tak, aby se s co největší pravděpodobností vyhnul nehodě.

Kód je špatný

Vychází z jednoduchého předpokladu, že většina kódu je špatná. Je to zajímavá myšlenka. Je pravda, že pokud se podívám na kód, který jsem psal před půl rokem, pravděpodobně bych ho teď napsal jinak, lépe. Většina kódu je špatná už když ho napíšeme a šel by napsat lépe. Pokud to náhodou neplatí a náš kód je dokonalý, stane se špatným později s příchodem nových technologií a procesů. Kód napsaný před deseti lety v PHP4 by dnes nestál za moc, ani kdyby byl tehdy napsán dokonale.

Jaké jsou tedy rady pro psaní Extremely defensive kódu v PHP?

  • Pište pouze kód pro váš use-case (kód, který nutně potřebujete), ne pro váš re-use-case
  • Dodržujte SOLID principles strýčka Boba
  • Žádné setery
  • Constuctor je jediné místo, kterým umožňujeme nastavit objekt
  • Constructor má všechny parametry povinné (žádné null apod.)
  • Žádné nepovinné závislosti objektu
  • Žádné zbytečné public metody (zbytečná = jde to i jinak)
  • Žádné „logic switch“ parametry funkcí = parametr, který mění logiku funkce. Místo toho vytvoříme novou funkci.
  • Při nastavování objektů používáme jejich clony
  • Stav objektu je vždy privátní (private properties by default)
  • Public metody jsou transakce, buď se celé vykonají nebo ne
  • Nikdy nevoláme metody objektu přes další objekt $user->getAccount()->getNumber();
  • Žádné mixed typy parametrů (mixed = různé datové typy)
  • Žádné mixed typy návratových hodnot
  • Používáme value objecty (objecty držící data) místo polí nebo sady proměnných
  • Nepoužíváme fluent interface
  • Třídy jsou v default FINAL
  • Nepoužíváme traits
  • Testujeme všechny scénáře (unit testy)
  • Nevěřte žádnému kódu!
  • Zredukujte množství vašeho kódu na potřebné minimum

Závěr

Už z popisu pravidel je zřejmé, že se opravdu jedná o extrém. V některých bodech jde tato technika i proti pravidlům čistého kódu. Jedná se ale o techniku pro specifický způsob vývoje. Představte si, že udržujete hodně veřejných a stahovaných knihoven na GitHub. Pokud nechcete mít problém s tím, že byla vaše knihovna špatně použita, myslím že je tato technika ideální.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *