Diskuze: Kontrola napsané API knihovny
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Uff, to je hrůza, až mě bolí oči. Proč proboha tolik statiky? Nenarazil
jsem na jediný kus kódu, kde by měla opodstatnění. Jestli chceš
argumentovat tím, že od toho budeš mít vždy jen jednu instanci, tak od toho
je singleton, který se začíná čím dál víc chápat jako antipattern -
např. Settings - co když to budeš chtít třeba ukládat do souboru? Budeš
mít smůlu a celé to budeš muset přepsat.
Ve zkratce - to, že od něčeho bude jen jedna instance není
důvod pro statiku, ta je k něčemu jinému - např. extension metody, nějaké
primitivní helper metody a pod. Jelikož očividně začínáš, doporučil
bych statiku nepoužívat, nikdy není třeba. Časem bys měl přijít
na to, co má smysl udělat statické - nejlepší je asi odkoukat to od jazyka
(resp. jeho standardní knihovny)
Všimni si třeba, že
var client = new RestClient(Settings.UrlApi); voláš strašně
často, to dost smrdí špatným návrhem a duplikací kódu, ne?
A to nehledě na to, že to asi
nebude nijak moc efektivní, jestli si třeba každá nová instance musí
otevírat nový socket...
Models/ContactModel.cs:
Ale fuj, třídy se píší až na extrémní výjimky každá do svého souboru
(opět, prostě je vždy dávej do svého souboru).
namespace namespace MauticApiLibrary.Models.GetContacts -
namespace typicky odpovídá adresářové struktuře a je dobrý nápad nechat
se o to starat IDE - VisualStudio je zrovna v tomto perfektní, když si
otevřeš properties složky, je tam nastavení toho, jak se to má generovat (a
udržovat!)
Proč máš naimportovaný namespace System.Threading.Tasks? Pokud začínáš, pokusy o paralelní zpracování bych opravdu nechal být, je to docela vysoká magie.
TL;DR celé bych to smazal a napsal znovu s tím, že se budu snažit to napsat pořádně.
Jak používat singleton místo statiky mi není jasné
A máš prosím nějaký tip, kde si můžu prohlédnout jednoduchou API knihovnu a brát ji jako vzor?
Budu muset po odstranění statiky vytvářet například vždy Contacts contacts = new Contacts(); ?
Singleton nepoužívat, je to vlastně pořád statika. Očividně vůbec
nechápeš principy OOP, zahoď všechno, co děláš a nauč se to. Tady je
dost fajn kurz.
Takto v žádném případě nemůžeš pokračovat, věř mi. A nebo mi nevěř
a zjistíš to "the hard way", až budeš muset něco úplně celé přepsat

Zajímavá třída na inspiraci by mohlo být třeba DateTime, nic lepšího
mě teď napadlo. Hledej .NET API browser, někde se tam dá proklikat ke
zdrojakům.
Jen bych chtěl upozornit na to, že není dobré se inspirovat třídou
Console, ta je velice specifická.
Abych byl upřímný, já bych se sám za SW inženýra dost dobrého na to, aby mohl ukazovat ostatním cestu neoznačil, jen jsem vypíchl to, co je naprosto objektivně špatně. Možná Marian Benčat by uměl říct, co je správná cesta.
Zobrazeno 10 zpráv z 10.
