Sto progettando un sistema flessibile Wizard che presenta un numero di schermate per completare un'attività. Potrebbe essere necessario saltare alcune schermate in base alle risposte ai prompt su una o più schermate precedenti.
Le condizioni per saltare una determinata schermata devono essere modificabili da un utente non tecnico tramite un'interfaccia utente. È necessario combinare più condizioni solo con and
.
Ho in mente un progetto iniziale, ma mi sembra inelegante. Mi chiedo se c'è un modo migliore per affrontare questa classe di problemi.
Design iniziale
UI
dove
La prima colonna consente all'utente di selezionare una domanda da una schermata precedente.
La seconda colonna consente all'utente di selezionare un operatore applicabile al tipo di domanda posta.
La terza colonna consente all'utente di inserire uno o più valori a seconda dell'operatore selezionato.
Modello oggetto
public enum Operations { ... }
public class Condition
{
int QuestionId { get; set; }
Operations Operation { get; set; }
List<object> Parameters { get; private set; }
}
List<Condition> pageSkipConditions;
Logica controller
bool allConditionsTrue = pageSkipConditions.Count > 0;
foreach (Condition c in pageSkipConditions)
{
allConditionsTrue &= Evaluate(previousAnswers, c);
}
// ...
private bool Evaluate(List<Answers> previousAnswers, Condition c)
{
switch (c.Operation)
{
case Operations.StartsWith:
// logic for this operation
// etc.
}
}