Humus s názvem MSDN

Michal Merta | 30. 11. 2009 | Software | | Přečteno: 1,527

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ě

Sdílení:
  • Facebook
  • Google Bookmarks
  • Linkuj.cz