úterý 18. října 2011

Validace vstupních parametrů metod.

Všechny vstupní parametry metod je vhodné validovat na jejich korektnost dříve než se s nimi začne pracovat.
V 90% případů mi stačí zkontrolovat, že vstupní parametr není null.
Joshua Bloch radí vyhodit NullPointerException, ale já, a troufám si tvrdit že i velká část java komunity, preferuje IllegalArgumentException.
Kód by mohl vypadat třeba takto
    public void foo(final String request) {
        if (request == null) {
            throw new IllegalArgumentException("Parameter 'request' can't be null.");
        }
    }
Protože nejsem na světě sám, co potřebuje validovat vstupní parametry, existuje spousta knihoven, které lze pro tyto účely využít (psát vlastní validační knihovnu považuji jen za zvyšování chaosu ve vesmíru).
První možností je třída org.apache.commons.lang.Validate z knihovny Apache Commons Lang.
    public void foo(final String request) {
        Validate.notNull(request, "Parameter 'request' can't be null.");     
    }
Místo původních třech řádků jen jeden. Na skoro všech projektech ale používám i Spring, tak proč nepoužít třídu org.springframework.util.Assert, která je hodně podobná org.apache.commons.lang.Validate?
    public void foo(final String request) {
        Assert.notNull(request, "Parameter 'request' can't be null.");
    }
Samotní autoři nedoporučují použít tuto třídu! Citace z javadocu:
Mainly for internal use within the framework; consider Jakarta's Commons Lang >= 2.0 for a more comprehensive suite of assertion utilities.
Další možnou variantou je knihovna Guava.
    public void foo(final String request) {
        Preconditions.checkNotNull(request, "Parameter 'request' can't be null.");
    }
Na té se mi ale nelíbí, že vyhazuje NullPointerException a varianta checkArgument, která vyhazuje IllegalArgumentException má vytaženou podmínku ven z metody, čímž se kontrola lehce komplikuje.
    public void foo(final String request) {
        Preconditions.checkArgument(request != null, "Parameter 'request' can't be null.");
    }
Já osobně zůstanu u třídy Validate. Jak validujete parametry metod vy?

úterý 10. května 2011

YouTrack v jPower8

Při spouštění firmy jsme potřebovali vyřešit problém issue trackingu. Přestože je v open source komunitě spousta řešení, šáhli jsme nakonec po komerčním řešení.

Co nás přesvědčilo?
  • Webové rozhraní - dostupnost i z domova i z práce.
  • Extrémně jednoduché ovládání – ostatně jako u všech produktů jetbrains.
  • Integrace na IntelliJ IDEA – umí dokonce i Jíru nebo PivotalTracker.
  • Integrace do TeamCity – u každého issue vidíme, v jakých buildech se na úkolu pracovalo.
  • Integrace na firemní LDAP.
  • Neomezený počet projektů i uživatelů.
  • Detailní možnosti nastavení přístupových práv.
  • Restové rozhraní pro import i export dat.
  • Přidávání custom políček a tagů.
  • Rychlost vyhledávání.

Interně používáme youtrack na řízení všech úkolů, které ve firmě řešíme. Dokonce naši zákazníci zapisují své připomínky a návrhy také do youtracku, kde průběžně vidí, jak se na nich pracuje. Šetříme tak čas svůj i zákazníka – prostě win-win strategie.

Používáme youtrack i jako vykazovací systém, ale o tom až příště.