OVal e la validazione degli oggetti in Java

Ormai è indubbio che la Reflection sia un giochino con cui si stanno divertendo un sacco di persone. Si tratta di una serie di librerie (sia Java che .Net) che consentono di sapere a Runtime tutto su una classe, un’istanza o sull’assembly di partenza. In Java la reflection consente facilmente di effettuare il mixing di codice su un assembly (ciò ha dato vita alla celebre libreria AspectJ) e recentemente si sono viste queste tecniche portate su .Net.

Usando AspectJ un gruppo di sviluppatori ha creato la libreria OVal che consente di decorare gli attributi di una classe Java indicando i costraint che occorre soddisfare per utilizzare correttamente quell’attributo. Supponiamo di avere un campo di tipo string e vogliamo aggiungere un costraint che impedisca stringhe nulle o con lunghezze maggiori di 32 caratteri. Allora scriveremo qualcosa del tipo

@net.sf.oval.annotations.Guarded
public class BusinessObject
{
    @NotNull
    @NotEmpty
    @Length(max=10)
    private String name;

    public void setName(@FieldConstraints String name)
    {
        this.name = name;
    }

    public void setAlternativeName(@FieldConstraints("name") String altName)
    {
        this.alternativeName = altName;
    }

    ...
}

Potremo usare la classe in questo modo:

BusinessObject bo = new BusinessObject();

bo.setName(""); // throws a ConstraintsViolatedException because parameter is empty

bo.setAlternativeName(null); // throws a ConstraintsViolatedException because parameter is null

Simpatico no? A volte mi fermo a pensare che i linguaggi di programmazione abbiamo già detto tutto. Ma poi arriva una cosa così e mi rimangio tutto. Buon Natale e Felice Anno Nuovo!!!