# Wizard, procedure più o meno guidate e affini

**URL:** <https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821>\
**Category:** IT\
**Created:** [January 31, 2013, 1:40am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821 "2013-01-31T01:40:42Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![SSkonishi\_takurou\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bb73d2/32.png) [@SSkonishi\_takurou\_S](https://www.ruby-forum.com/u/SSkonishi_takurou_S)\
**Post date:** [January 31, 2013, 1:40am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/1 "2013-01-31T01:40:42Z")

</div>

Ciao,

vi scrivo per chiedervi se avete best practice o ne avete mai sentite  
riguardo un argomento in particolare:

i wizard, le procedure o processi guidati in cui l’utente deve fare una  
serie di operazioni (possibilmente) senza perdersi, eventualmente  
ritornando ad un punto di partenza per continuare un task che dipendeva  
da  
un altro.

se non c’ molto, come credo, si potrebbe pensare qualcosa di framework  
agnostic per dare una mano in questi casi. io al momento ci perdo tanto  
tempo rispetto al resto…

sante

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [January 31, 2013, 9:19am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/2 "2013-01-31T09:19:58Z")

</div>

2013/1/31 Sante R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> se non c’ molto, come credo, si potrebbe pensare qualcosa di framework  
> agnostic per dare una mano in questi casi. io al momento ci perdo tanto  
> tempo rispetto al resto…

Ciao Sante, purtroppo un punto a sfavore dei framework che adottano un  
modello stateless (come Rails). Ad esempio Lift ha supporto all’interno  
del  
framework per generare wizards di pi pagine.

Il mio consiglio, per dominare la complessit, di rappresentare il  
wizard  
con  
un model e utilizzare gemme come state\_machine per gestire i cambiamenti  
di stato (quindi a ogni pagina del wizard avresti un cambiamento di  
stato).

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [January 31, 2013, 9:39am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/3 "2013-01-31T09:39:52Z")

</div>

2013/1/31 Stefano V. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> Hai dato un occhio a Wicked? [1] C’ stato stato anche un Railscast[2] su  
> di lui qualche tempo fa.

Grazie, non la conoscevo! Sembra astrarre quello che potresti fare con  
state\_machine e un po’ di logica custom.

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [January 31, 2013, 10:50am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/4 "2013-01-31T10:50:03Z")

</div>

Wicked interessante, anche se risolve un problema molto pi limitato di  
quello che ho in mente. Guarder bene il wiki per capire fin dove pu  
arrivare.  
grazie!

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [January 31, 2013, 9:22am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/5 "2013-01-31T09:22:53Z")

</div>

Hai dato un occhio a Wicked? [1](https://www.ruby-toolbox.com/projects/wicked) C’è stato stato anche un Railscast[2](http://railscasts.com/episodes/346-wizard-forms-with-wicked)  
su  
di lui qualche tempo fa.

–  
Stefano V.

Società Cooperativa weLaika  
Via Salgari 7, 10154 Torino (TO)  
[http://welaika.com](http://welaika.com) • removed\_email\_address@domain.invalid • 011-23.86.330  
P. IVA e C.F. 10300060018

2013/1/31 Stefano P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [February 1, 2013, 11:30am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/6 "2013-02-01T11:30:24Z")

</div>

2013/2/1 Andrea P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> personalmente non sono un amante delle gemme che vanno a coprire  
> contemporaneamente pi di un livello nello stack MVC (vedi Devise,  
> ActiveAdmin e anche Wicked :P)

Sicuramente una macchina a stati da qualche parte ci vuole.  
Non mi trovi d’accordo sulla tua prima affermazione, in quanto io sono  
fan  
di tutto quello che mi permette di guadagnare tempo, dove possibile, e  
di  
mantenere codice omogeneo in progetti diversi. Ci sono cose su cui  
bello  
sperimentare, altre in cui imho vale il principio DRY anche cross  
progetto.

Wicked pu andare bene per dei casi d’uso molto semplici, come quello del  
railscast linkato qualche mail fa, ma non abbastanza evoluto per fare  
quello che servirebbe a me.  
Io vorrei qualcosa che mi dia una pila di processi a stati, dove posso  
saltare da una pila alla successiva quando uno stato di un processo  
dipende  
dal completamento di un altro processo… un po’ quello che succede con  
lo  
stack quando si invocano funzioni da funzioni, n pi n meno.  
Ci sta che si dia qualche helper di navigazione alle view, per skippare  
passaggi o costruire facilmente un breadcrumb con gli step ecc, non lo  
trovo affatto in contrasto con MVC.

Che ne pensi Andrea?

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [February 1, 2013, 12:08pm UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/7 "2013-02-01T12:08:24Z")

</div>

Il giorno 01/feb/2013, alle ore 11:30, Sante R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
ha scritto:

> 2013/2/1 Andrea P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> 
> > personalmente non sono un amante delle gemme che vanno a coprire  
> > contemporaneamente pi di un livello nello stack MVC (vedi Devise,  
> > ActiveAdmin e anche Wicked :P)

> Non mi trovi d’accordo sulla tua prima affermazione, in quanto io sono fan  
> di tutto quello che mi permette di guadagnare tempo, dove possibile, e di  
> mantenere codice omogeneo in progetti diversi. Ci sono cose su cui bello  
> sperimentare, altre in cui imho vale il principio DRY anche cross progetto.

sono completamente daccordo con te, in linea di principio :-]

proprio in relazione al risparmio di tempo, facilmente dimostrabile che  
molte gemme che coprono troppi aspetti, vanno bene finch le usi “as is”,  
cio con il caso d’uso per il quale sono state previste.  
Devise e ActiveAdmin sono un caso lampante: finch ti servono “2 cazzate  
standard” sono ottime e in pochi minuti hai la funzionalit pronta. devi  
solo _pregare_ di non aver bisogno di qualche comportamento non previsto  
(una validazione, un redirect, un markup html differente…), altrimenti  
perderai ore. nel caso specifico di ActiveAdmin e Devise, sono gemme  
confusionarie e mal documentate. il tipico workflow : follow docs →   
watch it fail → write a working solution.

per rimanere DRY e non perdere tempo, solitamente ho un paio di  
approcci:

- cerco una gemma meno invasiva. per esempio Sorcery un ottimo sistema  
di autenticazione, facilmente customizzabile, e con un po’ di snippets  
di codice gi scritto e testato senza perdere tempo 😉

- scrivo qualcosa che posso riutilizzare (e magari la pacchettizzo in  
una gemma)

sono fedele alla filosofia UNIX: fai una sola cosa _bene_ e che si possa  
integrare con altri componenti. IMHO non ha senso fare _un po’ di tutto  
benino_ (un po’ come la differenza tra un webmaster vecchia scuola ed un  
team composto da designer, programmatore, sysop, etc) 🙂

> Ci sta che si dia qualche helper di navigazione alle view, per skippare  
> passaggi o costruire facilmente un breadcrumb con gli step ecc, non lo  
> trovo affatto in contrasto con MVC.

esatto 🙂 offrire qualche helper/macro/metodo, etc per parti specifiche  
perfetto. ma costruire un sistema trasversale (che coinvolge pi parti  
MVC perch altrimenti non funzia), IMHO terribile 🙂

A.

–

> **[Andrea Pavoni](http://andreapavoni.com)**
>
> Passionate programmer. \*nix user since 1999. Husband/Father. Teacher.

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [February 1, 2013, 11:15am UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/8 "2013-02-01T11:15:11Z")

</div>

personalmente non sono un amante delle gemme che vanno a coprire  
contemporaneamente pi di un livello nello stack MVC (vedi Devise,  
ActiveAdmin e anche Wicked :P)

generalmente sono complessi da gestire e/o modificare. in altre parole,  
se non segui il loro modo di funzionare, devi perdere il triplo del  
tempo a capire come adattarli per le tue esigenze.

mi sono trovato a dover affrontare la realizzazione di un wizard, come  
ti hanno gi risposto, meglio usare una state\_machine e gestire i vari  
steps.

di norma uso un codice molto simile a questo (modificato per le varie  
esigenze):

> <https://gist.github.com/andreapavoni/4690486>

ciao,  
A.

Il giorno 31/gen/2013, alle ore 10:49, Sante R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
ha scritto:

> Wicked interessante, anche se risolve un problema molto pi limitato di  
> quello che ho in mente. Guarder bene il wiki per capire fin dove pu  
> arrivare.  
> grazie!

–

> **[Andrea Pavoni](http://andreapavoni.com)**
>
> Passionate programmer. \*nix user since 1999. Husband/Father. Teacher.

---

<div class="post-metadata">

**Author:** ![Sante\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/eb9ed0/32.png) [@Sante\_R](https://www.ruby-forum.com/u/Sante_R)\
**Post date:** [February 1, 2013, 2:24pm UTC](https://www.ruby-forum.com/t/wizard-procedure-piu-o-meno-guidate-e-affini/225821/9 "2013-02-01T14:24:36Z")

</div>

2013/2/1 Andrea P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[cut]

> proprio in relazione al risparmio di tempo, è facilmente dimostrabile che  
> molte gemme che coprono troppi aspetti, vanno bene finchè le usi “as is”,  
> cioè con il caso d’uso per il quale sono state previste.

[cut]

> sono fedele alla filosofia UNIX: fai una sola cosa _bene_ e che si possa  
> integrare con altri componenti.

+1
