Nell'applicazione basata sul database (C # WPF / Entity Framework), vogliamo creare un sistema per inserire, archiviare, visualizzare e cercare contenuti arbitrari collegati alla nostra entità principale. La sfida qui è trovare un modello per questo.
I dati dovrebbero essere inseriti principalmente come coppie valore-chiave. Partendo da una o più domande predefinite (ad esempio "Che tipo di prodotto è questo?"), Ogni immissione di dati fa apparire la domanda successiva (in questo caso, ad esempio "Peso del prodotto?").
Se permettessimo agli utenti di inserire chiavi e valori come testo libero, non sarebbe ricercabile. Quindi vogliamo offrire due tipi di domande:
- Domande con risposte predefinite tra cui scegliere
- Domande con inserimento di testo libero (utilizzato principalmente per valori numerici)
Per inserirlo in uno schema software, abbiamo iniziato con la seguente interfaccia:
public interface IDecision
{
string Caption { get; }
bool HasSuggestions { get; }
IEnumerable<IDecisionResult> GetSuggestions { get; }
bool HasNextDecisions { get; }
IDecision GetNextDecision(IDecisionResult previousResult);
}
Caption
sarebbe la domanda visualizzata, GetSuggestions()
restituirebbe le risposte possibili (se non è una risposta a testo libero) e GetNextDecision()
restituirebbe la domanda successiva in base alla risposta di questa domanda.
I nostri problemi principali qui:
- Abbiamo bisogno di archiviare l'intero "albero decisionale" (domande, possibili risposte e le loro domande successive) e mostrarlo alla nostra interfaccia utente alla fine. Abbiamo pensato a una classe manager, ma come dovremmo abbinarla al nostro livello di modello? Dovremmo serializzare le istanze di IDecision direttamente nel database o utilizzare un livello intermedio? Come dovremmo gestire la differenza tra domande con risposte predefinite e domande a testo libero - con un enum nella nostra interfaccia o creando diverse implementazioni di
IDecision
? Non siamo legati a Entity Framework qui - staremmo bene con un file JSON contenente l'albero. - Abbiamo bisogno di memorizzare tutte le risposte collegate alla nostra entità principale. Una colonna ID in questa tabella sarebbe idonea a collegare la risposta alla domanda a fini di ricerca? Abbiamo pensato di dare ad ogni domanda un ID unico allora.