Sarà poi così speciale lo special case?

Innanzitutto per chi ancora non lo conosce come pattern può sempre vedere qui.
Ma è davvero così utile? O almeno...lo è in tutti i casi?

Nella fattispecie parlerò di UnknownEntity Special Case, cioè uno special case che si dovrebbe restituire (secondo Fowler) se la ricerca di una Entità fallisce, e invece di scatenare una eccezione, o ritornare un null viene ritornato un tipo UnknownEntity (che eredita da Entity).

Situazione classica:
Da un provider di dati per la classe Cliente voglio ottenere quello con un particolare Id
Da qualche parte, in qualche modo ci scapperà di fare il test se l'entità ritornata è UnknownEntity

Cliente cliente = ClienteProvider.Load(id)
if ( cliente is UnknownEntity ) ...

Che in quanto a bruttezza ...non ci scherza neanche...
la mamma mi ha sempre insegnato che la identificazione a Runtime dei tipi è una cosa esteticamente poco piacevole.
Quell'if è d'obbligo...se non troviamo un Cliente...dovremmo cambiare form di presentazione, avvertire l'utente...loggare da qualche parte...insomma non si scappa...

Visto che quando carico una entità che "dovrebbe" essere unica i casi sono sempre questi

  1. Nessuna Entità trovata.
  2. Una Entità trovata (quella giusta).
  3. Più di una Entità trovata (supponendo che nel mio database non c'è controllo sugli indici....affari vostri)

Allora mi viene da dire...
Tutti i metodi di ricerca di un provider di dati potrebbero ritornare delle liste, anche nel caso di ricerca per chiave primaria:

public IList<T> Load(int id)
{
    List<T> lista = new List<T>();
    // Implementazione della ricerca. Eventualmente .Add(Entita)
    return lista;
}

Il codice che utilizza quel provider non ha che da testare il .Count per decidere cosa fare.

IList lista = ClienteProvider.Load(id)
if (lista.Count != 0)  { cliente = lista[0]; }
else
(...)

Non ci sono null neanche in questo caso (che è lo scopo del pattern Special Case)...
e non è neanche come potrebbe sembrare una riga di codice in più....dato che nel provider...non ci sarà una gestione dello Special Case.
Ci evitiamo così di scrivere un UnknownEntity per ogni classe che abbiamo sul nostro dominio.

(Discorso diverso si potrebbe fare per una MissedEntity...magari più avanti)

Ho aperto anche un thread su Metodologie nel nostro forum...i vostri commenti ed esperienze sono graditissimi.

Print | posted on lunedì 9 ottobre 2006 14.03

Comments on this post

# [GUISA] Generic Special Case?

Requesting Gravatar...
Left by Web Log di Adrian Florea on ott 27, 2006 7.10

# Cheap air flights business class airfares.

Requesting Gravatar...
Cheap airfares to dallas from lax. Cheap airfares. Cheap south america airfares.
Left by Cheap airfares to greece. on gen 01, 2009 7.12

# Free animal sex videos.

Requesting Gravatar...
Animal sex video. Animal sex stories. Sex animal. Animal sex free. Free animal sex pics. Animal sex.
Left by Animal sex free. on gen 06, 2009 6.50

# Amateur private sex.

Requesting Gravatar...
Amateur moms. Amateur girls.
Left by Amateur radio. on gen 13, 2009 10.34

# Shemale art.

Requesting Gravatar...
Shemale movies. Shemale housewife. Shemale free. Shemale sex. Shemale cartoons. Shemale. Black shemale.
Left by Shemale yum. on gen 14, 2009 5.12

# Torture cases in missouri.

Requesting Gravatar...
Anal torture. Cock torture. Torture galaxy. Torture. Foot torture. Torture stories.
Left by Girls navel torture. on gen 15, 2009 3.28

# Amateur mature.

Requesting Gravatar...
Amateur private sex. Amateur movies. Amateur sex video. Amateur video clips. Amateur worldsex. Amateur home videos. Free amateur video.
Left by Amateur teen. on gen 16, 2009 8.06

# Diazepam.

Requesting Gravatar...
Pharmay order diazepam. Diazepam benefits. Diazepam no prescription.
Left by Buy diazepam online doctor consultations. on gen 18, 2009 3.02
Comments have been closed on this topic.