Humus s názvem MSDN
Jsem známý tím, že rád střílím od boku. A tentokrát tomu nebude jinak. Nehodlám si totiž dát velkou práci s tím, že bych zkoumal detailně celé MSDN. Již několikrát jsem se však v poslední době při pohledu do dokumentační části k .NETu rozpálil do ruda a nyní uzrál čas na odplatu.
Nebudu se pitvat v mých pocitech o nepřehlednosti a zmatenosti celého MSDN, protože bych se neubránil srovnání s Javadoc dokumentací k JDK. Často však slýchávám, že s dokumentací k platformě Java se MSDN nedá srovnávat. Že je daleko obsáhlejší a komplexnější. Zřejmě je tento rýpanec z části pravdivý, ale je také nutné ptát se, jaké kvality dosahují jednotlivé části MSDN. A v tomto směru musím na stranu MSDN říct, že mnohdy poněkud nevalné až humpolácké.
Uvedu malý příklad:
How to: Authenticate with a User Name and Password
A co že se mi na tomto příkladu nelíbí?
Začněme chybným odsazením řádků v příkladech. Čitelnost kódu klesá. Následuje metoda pro získání uživatelského jména a hesla čtením vstupu z klávesnice.
public static string Returnpassword()
No a humus je na světě.
Předně nechápu, proč sem někdo tuto metodu vůbec psal. Běžně se do příkladu vloží něco jako
string username = "frantaflinta";
Nicméně když už někdo chce celý článek znepřehlednit a odbočit silně od tématu, mohl by alespoň uvést příklad, který je funkční (bez chyb) a odpovídá standardnímu chování podobných řešení.
Všimněme si překlepu v názvu metody Returnpassword() . Z ostatních částí příkladů je jasné, že metoda měla nést název ReturnPassword() . Název metody je také přinejmenším hloupý.
Pokud budeme hodnotit obsah metody, způsob načítání znaků do řetězce hesla je dětinský, pomineme i zbytečné opakování info = Console.ReadKey(true) v obou větvích a i to, že hvězdičky se místo znaků hesla zobrazí až po stisku klávesy Enter. Ale snad ze všeho nejhorší je, že načtené uživatelské jméno se prostě a sprostě zahodí.
No bodejť by se taky nezahodilo, další část kódu nám ukáže, že uživatelské jméno se mělo načíst úplně jinou metodou:
client.ClientCredentials.UserName.UserName = ReturnUsername();
Deklaraci takové metody však příklad neuvádí.
Třída SecureString, která je v úvodu proklamována, se nepoužije
Na dané stránce jsem se ještě zarazil na dvou řádcích:
client.ClientCredentials.UserName.Password = ReturnPassword();
Malinko mi vrtalo hlavou, proč má property UserName ještě property Password. Podle kvality příkladu jsem si myslel, že je to místní výtvor, který je někde uveden v jiné části příkladu. A vrtalo to tak dlouho, až jsem se poohlédl v jiné části dokumentace na property UserName, zhrozil se nad názvem typu UserNamePasswordClientCredential a zjistil že opravdu obsahuje Password a UserName.
V tu chvíli se mi poněkud přitížilo v oblasti žaludku.
Inu pěkně si ten Microsoft vychovává programátory. Třeba i na svém Patterns & practices. Někdy jsou to opravdu „Proven practices for predictable results“ – tedy alespoň pokud očekáváte zborcení systému nebo něco neočekávaného. Ale o tom třeba příště

