Editing
Rychlý refaktoring v IDE: vestavěné nástroje versus ruční úpravy
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Prvním kritériem je povaha dat a jejich vztahů. Pokud máte hierarchická data nebo propojené entity, kde klient potřebuje různé podmnožiny polí, GraphQL vám ušetří spoustu práce. Klient si totiž požádá přesně o to, co potřebuje, a vy se nemusíte trápit s tvorbou desítek endpointů pro každou variantu. Typickým příkladem je mobilní aplikace, která potřebuje jen jméno a e-mail, zatímco webová verze chce i adresu a historii objednávek. S REST byste museli vytvořit dva endpointy nebo posílat zbytečně velká data.<br><br>Pozor na jeden typický zádrhel: pokud fixture vytvoříte, ale zapomenete ho použít jako argument v testovací funkci, pytest ho nespustí. Vznikne pak chyba, která vede k domněnce, že test nefunguje. Také si dejte pozor na přílišné sdílení stavů – pokud jeden test změní data, která používá jiný test, může to způsobit nepředvídatelné selhání. Vždy proto nastavte fixtures tak, aby byly izolované a každý test začínal s čistým stavem.<br><br>Než se rozhodnete pro NoSQL, proveďte jednoduchý test: zkuste si odpovědět, zda vaše data mají jasnou, neměnnou strukturu a zda potřebujete složité dotazy spojující více entit. Pokud ano, zůstaňte u SQL. Pokud ale zpracováváte velké objemy logů, ukládáte uživatelské profily s proměnlivými atributy nebo potřebujete horizontální škálování na úrovni běžného hardwaru, NoSQL dává smysl. Zejména horizontální škálování je silná stránka NoSQL – data se automaticky distribuují přes více serverů, což SQL databáze zvládají mnohem hůře. Typickým scénářem je také real-time analýza událostí, kde NoSQL umožňuje zapisovat miliony záznamů za sekundu bez poklesu výkonu, ovšem za cenu mírně zpožděné konzistence.<br><br>Na co si dát pozor při přechodu z SQL na NoSQL Největší chybou je přenést relační myšlení do NoSQL. Pokud začnete modelovat dokumenty jako tabulky s cizími klíči a budete je spojovat „ručně" při každém čtení, přijdete o hlavní výhodu – rychlost. V NoSQL se data obvykle denormalizují, tedy ukládají tak, aby je aplikace mohla přečíst jediným dotazem. To znamená, že si dopředu promyslíte, jaká data budete potřebovat společně, a ta uložíte do jednoho dokumentu. Často se vyplatí duplikovat informace (např. adresu zákazníka u každé objednávky), a to i za cenu náročnější aktualizace. Druhou typickou chybou je spoléhat na transakce. Vela NoSQL databází podporuje transakce jen na úrovni jednoho dokumentu, což stačí pro mnohé aplikace, ale ne pro všechny. Pokud vaše aplikace vyžaduje atomické operace napříč více záznamy (např. převod peněz z účtu na účet), NoSQL vás může nepříjemně překvapit.<br><br>Některá IDE umí také automaticky převést anonymní třídy na lambda výrazy nebo naopak. Tato funkce je užitečná při modernizaci staršího kódu. Než ji ale použijete, ověřte si, že lambda výraz skutečně odpovídá danému funkčnímu rozhraní – jinak vznikne chyba kompilace. Stejně tak si dejte pozor na rozdíly v zacházení s proměnnými, které jsou v anonymní třídě finální, ale v lambdě nikoli.<br><br>Další užitečnou funkcí je parametrizace. Místo psaní pěti podobných testů, které se liší jen vstupem a očekávaným výstupem, použijete dekorátor @pytest.mark.parametrize. Například: @pytest.mark.parametrize("cislo, vysledek", [(2, 4), (3, 9), (10, 100)]) a pak jedna testovací funkce, která ověří druhou mocninu. Tím zkrátíte kód, ale hlavně zpřehledníte, které kombinace selhávají. Pytest vám v hlášení ukáže přesně, která sada parametrů neprošla.<br><br>Pro práci s tabulkami a daty využijete knihovnu pandas. Není součástí základní instalace, takže ji musíte doinstalovat přes správce balíčků. Nejčastější postup je příkaz pip install pandas v terminálu. Tato knihovna umí načíst excelový soubor, projít jednotlivé řádky, provést výpočty a výsledek uložit zpět. Pozor na to, že pandas vyžaduje, aby byl soubor zavřený v jiném programu – když ho máte otevřený v excelu, skript skončí chybou. Stejně tak dejte pozor na kódování souboru, ideální je UTF-8, jinak se vám v datech objeví místo českých znaků otazníky.<br><br>Psaní testů patří k základům solidního vývoje, ale mnoho začátečníků se mu vyhýbá, protože neví, kde začít. Pytest je nástroj, který proces testování výrazně zjednodušuje díky své čitelné syntaxi a bohatým možnostem. Nemusíte psát složité třídy ani dědit z pomocných knihoven – stačí obyčejné funkce a pár pravidel. Pokud jste dosud používali pouze print() pro kontrolu, jestli kód funguje, pytest vám ukáže, jak testy dělat systematicky a spolehlivě.<br><br>Nejčastějším důvodem, proč vývojáři sahají po NoSQL, je potřebu ukládat polostrukturovaná nebo nestrukturovaná data s proměnlivou strukturou. Typickým příkladem jsou JSON dokumenty, které mohou mít u každého záznamu jiné pole. V relační databázi byste museli vytvářet několik tabulek s prázdnými sloupci nebo používat komplikované normalizace. NoSQL dokumentová databáze vám umožní uložit každý záznam tak, jak přišel, bez předem daného schématu. To oceníte zejména při vývoji aplikací, kde se požadavky na data rychle mění – nemusíte při každé změně struktury spouštět migrace. Musíte si ale uvědomit, že tím ztrácíte kontrolu nad konzistencí dat, kterou SQL vynucuje.
Summary:
Please note that all contributions to BloomWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
BloomWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Search
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Tools
What links here
Related changes
Special pages
Page information