jAbLoK

blog už dávno nejen o javě

Anotace? Ano, ale s mírou

leave a comment »

Na stránkách java.sun.com se objevil článek Anderse Holmgrena o tom, jak pomocí anotací deklarovat validační kritéria u Java Beans.

Přesněji řečeno, článek je cvičením z nových vlastností, které přináší Java 5, a tyto vlastnosti jsou demonstrovány na design patternu, kterým by používání anotací k ověřování hodnot mohlo být.

Pointu článku nejsnáze shrnu názornou ukázkou kódu:

public class Vehicle {
    private int speed;

    public int getSpeed () {
        return speed;
    }

    @MinValue(0)
    @MaxValue(299792458)
    public void setSpeed (int speed) {
        this.speed = speed;
    }
}

(tedy máme třídu vozítek a do kontrolní anotace údaje o maximální rychlosti uvedeme informaci, že nikdy nebude vyšší než je rychlost světla ve vakuu — a pro pořádek ani nižší než nula).

Toto se na pohled může zdát velmi elegantní — pryč s trapnými kontrolami platnosti, nechme kód dělat to podstatné, a otravnou omáčku nechme strojům… pardon, anotacím.

Elegantní?

Výhodou tohoto přístupu je bezesporu jistá "elegance" a úspora kódu. Nicméně domnívam se, že vždy, kdy jedinou výhodou nějakého řešení je úspora objemu kódu, je třeba zbystřit. V praxi se totiž ukazuje, že takováto elegance může vyjít velmi draho z důvodu snížené srozumitelnosti kódu, někdy dokonce i před autorem samotným — typickým přikladem je rozšiřováním funkcionalit prvků typu String či tříd z Collection frameworku děděním namísto dekorováním (viz jedna z 57 rad Joshuy Blocha) .

Z tohoto důvodu mi tento přístup přijde vhodný pro velmi jednoduché situace, jako je validace formulářů. Jeho použítí na úrovni doménového modelu může ale být cestou do pekel — případů užití je tam nepoměrně více a tedy je i nepoměrně více způsobů, kterak kreativnější člen týmu může tento nástroj nevhodně použít či přinejmenším zamlžit srozumitelnost jeho použítí.

Mimochodem na podobné téma se vzápětí objevil i článek Validating Objects Through Metadata, který už autor zcela jednoznačně cílí právě na validaci Struts formulářů.

Diskuse

Na zmíněný Holmgrenův článek jsem se dostal tradičně přes avízo na TSS, u nějž tradičně najdeme zajímavější diskusi než u vlastního odkazovaného článku (zde nemohu nezmínit odbočku na TSS parodii ze svérázných zápisků Haniho Suleimana).

Vlastní diskusi komentovat nebudu, za pozornost ale stojí skeptická zmínka ze světa, kde anotace už nějaký pátek fungují:

I have lived with annotations in .NET for several years and find it suprisingly hard to communicate its usage to team members and library users.

Pro zajímavost, dotyčný diskutující pokračoval následující poněkud technooptimistickou douškou:

I think annotations can be very useful, but the world is not ready, it seems.

Nemohu si pomoct, ale na dobré myšlenky, do nichž lidstvo ještě neuzrálo, tak nějak nevěřím. Většinou stačí nevidět v každé novince zlaté kladívko.

Offtopic — inzerát

Velmi kvalitní sníh (via ILblog).

Written by Pavel Kolesnikov

Březen 20, 2005 na 2:19 pm

Zasláno do Java

Tagged with ,

Napsat komentář

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Log Out / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Log Out / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Log Out / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Log Out / Změnit )

Připojování k %s

%d bloggers like this: