[ruby-it] la buona programmazione seguendo il modello MVC.

Pietro Giorgianni giorgian a gmail.com
Ven 6 Feb 2009 11:44:26 CET


Il 6 febbraio 2009 10.31, Daneel Olivaw <daneel.olivaw.r a gmail.com> ha scritto:
> Uhm... io ho i modelli praticamente vuoti (a parte l'indicazione delle
> relazioni tra tabelle), mentre sui controller c'è praticamente tutto
> quello che deve fare... sbaglio io? Ho l'applicazione talmente piccola
> che va bene così? Altro?
>
> Non è che ci sia da qualche parte un progettino in rails non troppo
> complesso (ma neanche troppo semplice) per capire come fare le cose
> nella maniera giusta? Finora ho trovato guide o troppo semplicistiche o
> che davano molte cose per scontate, forse non ho guardato quelle giuste?

torno a consigliare i railscasts, ora non ricordo gli episodi esatti,
ma ci sono molti esempi.

un motivo per piazzare la logica (ad esempio le query complicate) nel
model invece che nel controller è la convenienza di avere funzioni
autodocumentate: metti che un'action del controller è parecchio lunga
ed elaborata; o la seppellisci di commenti, oppure è codice write
only, che tra un po' di tempo non avrai più il coraggio di tentare di
decifrare.

invece, nel model puoi creare dei metodi ad hoc, il cui nome documenta
già il codice.

magari nel controller hai un if seguito da una roba lunghissima, una
query piena di condizioni, include, etc., che serve, che so, a
controllare se l'editore ha pubblicato almeno un libro di un autore o
un'autrice il cui coniuge fa l'attore.

ecco, quel find potrebbe stare in un metodo di Publisher (o Editor, fa tu):

class Publisher < ActiveRecord::Base
  has_many :books
  ....

  def has_published_an_author_married_to_an_actor_or_actress?
    ...
  end
end


così ora nel tuo controller trovi:

if @editor.has_published_an_author_married_to_an_actor_or_actress?
  ...
end


stessa cosa quando fai una serie di operazioni per modificare un
record, che so, calcoli matematici o altro; se i calcoli li piazzi in
un metodo del model, con un nome esplicativo, così il controller
diventa molto leggibile e in più, quando leggi il codice, puoi
scegliere se semplicemente guardare il funzionamento generale o se
scendere nel dettaglio di come vengono fatte le varie operazioni,
leggendo la definizione dei metodi che fanno cose strane.

pietro


More information about the Ml mailing list