Django signály

cs v kategorii code • 2 min. čtení
Mind the age! Most likely, its content is outdated. Especially if it’s technical.

Nemám v úmyslu zde podrobně popisovat, jak signály fungují. Od toho tu je dokumentace. Chci pouze upozornit, že existují, lze je šikovně využít, ale taky si s nimi lze nadrobit na problémy.

K čemu signály jsou? Jednoduše k decoupling. Zrušení závislostí v kódu. Představme si to na ukázce, třeba typu e-shopu:

E-shop se skládá ze spoustu menších aplikací a každá dělá jednu svou věc. Jedna z těchto aplikací jistě bude napojení na platební bránu. Po zaplacení platby ale určitě nebude stačit pouze upravit v databázi stav platby, ale bude chtít také změnit stav objednávky, poslat zákazníkovi informaci o stavu, odeslat informace na sklad, … a spoustu dalších věcí záležící dle konkrétního e-shopu.

Klasicky by v appce payment musel být kód, který bude importovat ostatní appky e-shopu a volat jejich metody. Co se právě stalo? Appka payment není univerzální. Nejde ji dát do odděleného repozitáře a využít jinde. Je navždy spojena s konkrétním kódem e-shopu.

Jak by to vypadalo se signály? V payment appce se definuje signál, který se bude vyvolávat při změně platby. Ostatní appky budou na tento signál pouze vyčkávat. Tím bude platební modul přenositelný i do jiných aplikací. Sice je pravda, že nyní je situace opačná – ostatní appky jsou závislé. Ale… tak je to přeci správně, ne? :-)

Pro inspiraci – na BOObook.cz o produktech, krom základních atributů jako název či cena, žádná jiná appka nic neví. Nemusím tak nikde natvrdo psát, aby se po zaplacení zákazníkovi knihy zapsaly do knihovničky či poslaly mailem. Jednoduše se v appce ebook čeká na spuštění signálu o zaplacenosti a poté se zde zařídí vše potřebné.

Tím jsem docílil toho, že mohu vzít kód e-shopu krom produktů, napsat novou definici produktů (třeba na zubní pasty) a vše mi bude fungovat. Aniž bych musel cokoliv jiného měnit. Skvělé!

Podobně s fakturačním modulem. Nikde nevolám invoice.create_invoice(...), místo toho fakturační modul čeká na ten správný signál. Tím mohu mít dva fakturační moduly (jeden velmi základní a jeden komplexní s napojením do účetnictví) a zaměnit je dle libosti bez úpravy kódu. Dle toho, o který si zákazník řekne.

Než se ale vrhnete do zkoušení – signály nejsou řešením pro všechno. Je potřeba se zamyslet, zda využití signálu bude opravdu užitkem. Aspoň určitě se budete důkladně zamýšlet, až začnete hledat první bugy v těchto úsecích kódu. Není to zábava. :-) Nadměrné použití signálů také ztíží čitelnost kódu, protože už nebude jasné, kdy se co volá. Takže opatrně s nimi!








Může se vám také líbit

en Makefile with Python, November 6, 2017
en Fast JSON Schema for Python, October 1, 2018
en Deployment of Python Apps, August 15, 2018
cs Jasně, umím Git…, August 6, 2014
cs Checklist na zabezpečení webových aplikací, March 1, 2016

Další články z kategorie code.
Nenechte si ujít nové články díky Atom/RSS kanálu.



Poslední příspěvky

cs Mami, tati, přejde to, December 9, 2023 in family
cs Co vše bychom měli dělat s dětmi?, November 24, 2023 in family
cs O trávicí trubici, November 7, 2023 in family
cs Na šestinedělí se nevyspíš, October 28, 2023 in family
cs Copak to bude?, October 20, 2023 in family