Best practice per l'elaborazione di un elenco di elementi

2

Ho una lista di oggetti che devono essere elaborati in qualche modo. In questo modo potrebbe non essere corretto per un oggetto e quindi sollevare un'eccezione. In pseudo-codice, sarebbe simile a:

proccessItems (list)
  error = new empty list
  for item in list:  
    try:
      process_item(item)
    catch Whatever, err:
      error.append(err)
  return error

C'è un modello per fare questo genere di cose? Ci sono degli anti-pattern da evitare?

Un codice migliore (eccezione non utilizzata per il flusso di controllo), ma che segue sempre la stessa logica sarebbe:

proccessItems (list)
  error = new empty list
  for item in list:  
    ret = process_item(item)
    if null != ret 
      error.append(ret)
  return error
    
posta Sardathrion 25.11.2011 - 11:04
fonte

2 risposte

4

Prima di tutto, non dovresti usare le eccezioni per il normale flusso logico.

Dovresti chiederti perché stai cercando di iterare su elementi che non puoi elaborare in primo luogo. Probabilmente progettando il codice in modo tale da avere solo elementi nella tua lista che puoi elaborare è un'idea migliore.

Nel caso in cui ti senti come tutti quegli elementi appartengono a quella lista. Invece di lanciare un'eccezione, dovresti comunque utilizzare un controllo condizionale (o polimorfismo ) per vedere se il l'articolo è adatto per l'elaborazione.

Non posso specificare anti-pattern "ufficiali", ma prenderò in considerazione quanto segue:

  • Utilizzo delle eccezioni per il flusso logico.
  • Uso del controllo del tipo o di altri controlli condizionali invece del corretto design / polimorfismo.
risposta data 25.11.2011 - 11:37
fonte
2

Passerei anche la lista degli errori alla funzione process_item, quindi avresti un semplice iteratore e non avresti bisogno di generare eccezioni per essere catturato dalla funzione proccessItems.

In questo modo potresti forse sostituire le eccezioni per i semplici messaggi di errore (come una stringa) ed evitare di usarli per il controllo del flusso poiché non è questo il motivo per cui sono stati progettati in primo luogo. (usarli come questo è una cattiva pratica)

Ricorda che le eccezioni (a seconda della lingua) sono operazioni costose quindi, dato un elenco abbastanza grande, l'esempio corrente potrebbe essere un problema.

    
risposta data 25.11.2011 - 11:51
fonte

Leggi altre domande sui tag