lunedì 9 aprile 2018

Altro esempio di "buona" programmazione


Oggi mi sono imbattuto in questo: frontend che deve visualizzare dati da una tabella A e permette di ricercare per vari parametri tra cui x. X che pero' non e' su A ma su B. Poco male, basta una join... Pero' se fosse stato cosi' non sarei qui a scrivere.

Il tizio: prima va su B e si tira su tutte le righe che corrispondono a x (e sono una valanga di colonne). Poi fa un ciclo e aggiunge l'id di A ad un Set (poi vi spiego anche perche'). Prende un interator dal set e va per id su A (finalmente).

Perche' proprio un Set? Perche' non ammette duplicati, e la relazione tra A e B e' uno a molti. Quindi una riga di A ha piu' corrispondenze su B. Bastava una distinct... in sql select distinct(id) su hibernate addiruttura e' possibile a) tirare su l'entity (select pippo from A pippo) passando alla select l'alias e farlo con distinct (select distinct pippo) e poi schioccarci la join... select distinct a from A a, B b where a.id = b.id and eccetera...

UNA query. UNA!