Identificatore per la fase "completata" di un processo: 0, 99, qualcos'altro? [chiuso]

-1

Supponiamo che tu stia gestendo un processo a più fasi (come un modulo di registrazione complesso, con una serie di passaggi che l'utente ha eseguito in ordine). Devi essere in grado di salvare lo stato corrente del processo (ad esempio in modo che l'utente possa tornare a quel modulo di registrazione in un secondo momento e continuare a seguire il punto in cui erano rimasti).

Ovviamente, probabilmente vorrai assegnare a ciascun "passo" un identificatore a cui puoi fare riferimento: 1, 2, 3, 4, ecc. La tua logica controllerà questo step_id (o qualsiasi altra cosa tu lo chiami) rendere i dati appropriati.

La domanda: come identificheresti lo stage dopo la fase finale, come lo stato di registrazione completato (ad esempio, hai per dare a quest'ultimo "step" il proprio id, ecco come la tua logica è strutturato). Sarebbe un 0 , 999 , un valore non intero, qualcos'altro interamente?

    
posta Arnold 23.11.2012 - 05:02
fonte

4 risposte

1

Non memorizzerei affatto step_id , dato che stai limitando te stesso in futuro. Scomposizione in 2 gruppi di ordini:

  • Ordine incompleto
  • Completa l'ordine

Usa solo un booleano per memorizzarlo. Quindi devi solo preoccuparti degli ordini incompleti ora (che sono proporzionalmente pochi rispetto al numero totale di ordini nel tuo sistema). Ora ogni dettaglio necessario che devono inserire deve essere il suo campo:

  • Nome
  • Via
  • Città
  • ecc.

Ora in futuro potresti voler dividere i tuoi passi in vari modi. C'è una tendenza ora ad allontanarsi dai passaggi e verso una singola lunga pagina in cui l'utente può saltare e inserirla nell'ordine che preferisce, ma potrebbe essere passi.

Quindi, quando ricostituisci un ordine incompleto, hai qualcosa del tipo:

OrderStep currentStep(Order incompleteOrder)
{
    if(!step1FieldsComplete(incompleteOrder))
    {
        return OrderStep.One; // silly naming, I know, but give it more meaningful name
    }
}

bool step1FieldsComplete(Order incompleteOrder)
{
    return 
        incompleteOrder.Name != null
        && incompleteOrder.Street != null
        && ...;
}

Ora, quando vuoi spostare i campi da un passaggio a un altro o unire 2 passaggi in uno, hai un sacco di flessibilità e il codice funzionerà anche se aggiungi nuovi campi in un passaggio precedente che il cliente ha già riempito su. Quando tornano, verranno semplicemente riportati al passaggio con il nuovo campo.

    
risposta data 23.11.2012 - 16:48
fonte
1

Considererei qualcosa di simile a una tabella di stato (o tabella di stage (o tabella di passi)). Questa tabella dovrebbe contenere un ID e una Descrizione e potenzialmente qualsiasi altra cosa tu ritenga debba essere associata a uno stato / stage / passaggio. Cerca solo di trovare una sorta di descrittore pertinente su ogni passaggio, ma spero che non sia troppo difficile.

1 - Inizia
2 - Informazioni personali
3 - Informazioni indirizzo
4 - Un altro stato 5 - Completato

Idealmente, ulteriori passaggi non sarebbero aggiunti lungo la strada, ma catturati in primo piano nel processo di progettazione. Solo un pensiero.

    
risposta data 23.11.2012 - 05:45
fonte
1

Alle persone piace contare in ordine, quindi sistemi come questo spesso richiedono l'ordinamento delle pagine per numero ID. Gli ID delle pagine tendono ad andare a passi di 10, anche se è possibile scegliere qualsiasi numero arbitrario. Ciò ti consente di inserire in un secondo momento pagine tra pagine esistenti senza rinumerare le pagine esistenti.

L'utilizzo di un valore insolitamente alto come 999 per la pagina finale consente di inserire un numero ragionevole di pagine senza dover rinumerare la pagina finale. Questo è perfettamente ragionevole.

 10 Start page
 20 Welcome
 30 Select products to install
 35 Configure products          <-- Page inserted later
 40 Select folder to install to
 50 Confirm installation
 60 Display install progress
999 Finished
    
risposta data 23.11.2012 - 05:46
fonte
1

Non realizzerei davvero una tabella con identificatori numerici, ma qualcosa di più simile a questo:

Current | Next
--------------
Start   | Page1
Page1   | Page2
Page2   | End
End     |

In questo modo puoi facilmente inserire una pagina in mezzo. E la tua pagina finale sarebbe quella con un valore vuoto (nullo).

    
risposta data 23.11.2012 - 12:42
fonte

Leggi altre domande sui tag