Un oggetto dovrebbe aggiornarsi da solo?

1

Sto lavorando su Ruby on Rails. C'è una funzionalità nella nostra app in cui i medici possono "reclamare" i casi da soli.

Posso fare in modo che il dottore esegua l'azione e aggiorni la piastra, oppure posso mandare il medico al piatto e aggiornare la piastra stessa.

Gli oggetti dovrebbero aggiornarsi da soli? Mi sembra solo più pulito, ma non ne sono sicuro. O forse sto pensando troppo?

Primo caso, solo medico:

def claim(plate)
  plate.claimed = true
  plate.doctor_id = id
  plate.save
end

Questo è il secondo caso (il medico si invia alla piastra):

  #doctor
  def claim(plate)
    plate.claimed_by(self)
  end

  #plate
  def claimed_by(doctor)
    self.claimed = true
    self.doctor_id = doctor.id
    self.save
  end
    
posta Daryll Santos 04.03.2014 - 11:19
fonte

1 risposta

4

Il secondo caso consente alla logica del business aggiuntivo (come la convalida) di verificarsi nel corpo del metodo, a meno che plate.claimed e plate.doctor_id non siano proprietà di prima classe e abbiano già una validazione a sé stante.

Il secondo caso è più "atomico", nel senso che l'oggetto lastra ha più controllo sul proprio stato all'interno del metodo claim_by. Se qualcosa va storto, sei ancora nel corpo del metodo e hai l'opportunità di fare un po 'di pulizia.

Il secondo caso è un esempio migliore di "Dillo, non chiedere". . Piuttosto che manipolare i dati dell'oggetto lastra dall'esterno, stai dicendo all'oggetto piatto quello che vuoi e lasciando che l'oggetto lastra manipoli il suo stato.

    
risposta data 04.03.2014 - 17:32
fonte