Pattern migliore di grande se / else se / else per il controllo dei condizionali [duplicato]

0

Ho un set abbastanza grande di booleans che sto controllando in javascript, e quindi li uso per modificare lo stato di un layout nella mia app React. L'intera faccenda è ingombrante, difficile da leggere, poco elegante e terribilmente amatoriale. Mi stavo chiedendo se ci fosse un modello migliore per gestire qualcosa di simile.

Esempio di snippet di codice (in coffeescript). Sostituite le variabili oggetto con ints per brevità:

setNeeded = _.contains(sessionInitialStates, codingSession.state)
sessionUpdating = codingSession.state is 'UPDATING'
sessionFailed = codingSession.state is 'FAILED'
setExtended = _.contains extStates, codingSession.state
setInReview = _.contains(reviewStates, controlSet.state) or
  _.contains(controlSetSyncStates, controlSet.state)
sessionIsTagging = _.contains tagStates, codingSession.state
sessionComplete = codingSession.state is 'COMPLETE'
sessionIsNew = _.isEmpty(codingSession.state) or
  codingSession.state is 'CREATED'

commError = controlSet.state is 'COMMUNICATION_ERROR'
if setNeeded and @props.creds
  someVar = 1

else if _.contains(sessionInitialStates, codingSession.state) and
    controlSet.state is 'PROCESSING_FAILED'
  someVar = 2

else if codingSession.state is 'CONTROL_SET_GENERATION' and
    controlSet.state is 'SELECTION_FAILED' and @props.creds
  someVar = 3

else if !sessionIsTagging or !sessionComplete
  if _.isEmpty @props.connector
    someVar = 4

  else if [email protected]
    someVar = 5

  else if sessionFailed
    someVar = 6

  else if sessionIsNew
    someVar = 7

  else if sessionUpdating
    someVar = 8

  else if setInReview and !setExtended
    someVar = 9
    
posta Kevin Whitaker 18.02.2015 - 22:19
fonte

1 risposta

0

Quando noti blocchi di grandi dimensioni di if / else , di solito significa che la tua classe o metodo sta facendo troppo.

Invece di provare a riscrivere la logica all'interno del metodo:

  • Assicurati che il metodo faccia una e una sola cosa.

  • Sostituisci la classe con più classi che ereditano da una comune.

Per esempi pratici, se hai un pezzo di codice effettivo ma contiene troppe dichiarazioni if / else , puoi postarlo su CodeReview.SE .

    
risposta data 19.02.2015 - 00:02
fonte

Leggi altre domande sui tag