Slovník pojmů
Framework
Framework řídí hlavní tok aplikace a volá kód aplikace v určených bodech. Nejde o programovací jazyk, hotový produkt ani automatickou záruku dobré architektury.
Stručná definice
Konvence a životní cyklus aplikace na společném základu.
Framework poskytuje strukturu pro opakující se problémy: routing, vytvoření controlleru nebo presenteru, dependency injection, konfiguraci, validaci, formuláře, bezpečnostní integraci či návrat HTTP odpovědi. Díky tomu tým nezačíná každou aplikaci stejnou infrastrukturní vrstvou od nuly.
Zásadní rozdíl vůči knihovně je inversion of control. Aplikace obvykle přímo zavolá knihovnu; framework řídí životní cyklus a v odpovídající chvíli zavolá kód aplikace. Hranice nemusí být absolutní – například Symfony poskytuje celý framework i samostatně použitelné komponenty.
Jaký problém řeší
Dává týmu opakovatelný způsob stavby aplikace
Framework je užitečný tam, kde aplikace dlouhodobě řeší HTTP, data, bezpečnost a vývoj více funkcí.
- routing URL na controller nebo presenter
- vytváření a konfiguraci služeb přes dependency injection
- validaci vstupů, formuláře a chybové odpovědi
- bezpečnostní komponenty, konzolové příkazy a databázové integrace
- konvence pro testy, balíčky, konfiguraci a rozšiřování aplikace
Praktický příklad
Framework koordinuje vstup, služba drží pravidlo objednávky
V administraci vede route pro zrušení objednávky do controlleru nebo presenteru. Ten přečte request, ověří uživatelský kontext a předá záměr aplikační službě. Služba rozhodne, zda lze objednávku zrušit, a vrátí výsledek, který framework převede na HTML nebo JSON odpověď.
Business pravidlo nemá být automaticky napsané v controlleru, modelu ORM ani jobu jen proto, že to framework usnadňuje. Framework koordinuje běh; hranice domény a aplikace jsou samostatné návrhové rozhodnutí.
HTTP request
→ routing
→ controller / presenter
→ aplikační služba
→ HTTP response
Jak funguje
Od requestu ke kódu aplikace a zpět
Zjednodušený flow platí pro běžnou HTTP aplikaci; konkrétní názvy se mezi frameworky liší.
- Vstup do frameworku Webový server předá request aplikaci a framework založí potřebný kontext.
- Routing Framework vyhodnotí URL a metodu a zvolí controller, presenter nebo jiný obslužný bod.
- Služby a middleware Container poskytne závislosti, middleware či posluchače mohou řešit společné technické kroky.
- Aplikační pravidlo Kód aplikace pracuje s daty a pravidly; controller má koordinovat vstup a výstup, ne pohltit celý proces.
- Response Framework sestaví HTML, JSON, redirect nebo jiný výsledek a vrátí jej webovému serveru.
Důležité části
Framework usnadňuje opakované technické vzory.
Nevynucuje však sám správné hranice businessové logiky.
Routing a lifecycle
Směruje HTTP request do aplikace a určuje, ve kterém okamžiku se vykoná vlastní kód.
Dependency injection
Container vytváří služby a jejich závislosti. Neznamená, že každá třída potřebuje rozhraní nebo abstrakci.
Konfigurace a rozšiřitelnost
Konvence zrychlují zavedení běžných funkcí. Pluginy a balíčky však přidávají závislosti, které je nutné udržovat.
Bezpečnostní a datové integrace
Framework může nabídnout nástroje pro validaci, CSRF, session nebo databázi, ale správné použití zůstává na aplikaci.
Komponenty
Některé části frameworku lze použít samostatně. To neznamená, že každá aplikace potřebuje celý framework.
Vztah k podobným pojmům
Framework není jazyk, CMS ani hotová architektura.
Rozdíly pomáhají vybrat přiměřenou míru infrastruktury.
- Knihovna
- Knihovna řeší konkrétní funkci a volá ji aplikace. Framework obvykle volá aplikační kód.
- Programovací jazyk
- Jazyk určuje zápis a runtime kódu; framework je nadstavba s konvencemi a nástroji.
- CMS
- CMS je hotovější produkt pro správu obsahu. Framework je stavební základ, nikoli nasaditelná aplikace pro konkrétní účel.
- Architektura
- Framework nabízí technickou strukturu; architektura určuje odpovědnosti a závislosti konkrétní aplikace.
Výhody a omezení
Konvence šetří práci, ale vytvářejí závazek k ekosystému.
Přínosy
- sjednocený způsob práce s HTTP, službami a konfigurací
- využití udržovaných komponent místo vlastního opakování infrastruktury
- rychlejší onboarding a čitelnější struktura pro tým
- integrace testů, konzolových úloh a bezpečnostních postupů
Časté chyby
- považovat framework za náhradu znalosti PHP, HTTP a databází
- psát veškerou logiku do controllerů, modelů či jobů
- záviset na frameworkových třídách i v jádru doménových pravidel
- nasadit robustní framework na izolovaný skript bez dlouhodobého důvodu
Kdy dává smysl
Pro dlouhodobě rozvíjené aplikace s opakující se infrastrukturou.
Symfony, Laravel a Nette se hodí pro různé týmy a existující projekty. Nelze je seřadit od nejlepšího k nejhoršímu; rozhoduje produkt, zkušenost týmu, potřebné integrace, údržba i zvolený styl práce.
Malý skript nebo úzce vymezená úloha může vystačit s několika knihovnami. Ve chvíli, kdy aplikace řeší HTTP, data, oprávnění, konfiguraci a více funkcí, se společná struktura frameworku obvykle vyplatí.
Na co myslet
Framework má podporovat jednoduchý kód, ne skrývat složitost.
Volba frameworku je začátek údržby, nikoli jednorázové rozhodnutí.
- držet controller nebo presenter u koordinace vstupu a výstupu
- oddělit stabilní business pravidla od zbytečné vazby na framework
- aktualizovat framework a jeho závislosti řízeně s testy
- využívat bezpečnostní komponenty, ale ověřit jejich konkrétní konfiguraci
- volit míru abstrakce podle složitosti aplikace
Časté otázky
Framework bez zbytečných zkratek
Jaký je rozdíl mezi frameworkem a knihovnou?
Aplikace obvykle volá knihovnu. Framework řídí hlavní tok aplikace a volá kód aplikace v určených bodech.
Je Symfony framework, nebo knihovna komponent?
Obojí: Symfony nabízí celý framework a také samostatně použitelné Components. Záleží, jakou část ekosystému projekt používá.
Je Laravel nebo Nette lepší framework?
Neexistuje univerzální pořadí. Rozhodují potřeby projektu, tým, existující systém, ekosystém a dlouhodobá údržba.
Zaručí framework čistou architekturu?
Ne. Pomáhá s technickou strukturou, ale odpovědnosti, závislosti a business pravidla musí navrhnout tým.
Jak pracuji s PHP v praxi
Framework používám jako oporu pro udržitelný backend.
V aktuálních PHP projektech stavím na Symfony a jeho ekosystému, vždy s ohledem na přiměřenou architekturu konkrétní aplikace.