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.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.