Pattern dell'interfaccia utente della Knowledge Base

1

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.
posta Franz Wimmer 27.05.2016 - 20:18
fonte

1 risposta

1

Vorrei creare una DSL che descrivesse le tue domande in questo modo:

Question #11:
  Caption: just question
  Type: free text
  Next question: <<C#CODE
    return #12;
C#CODE>>

Ciascuna delle domande può essere memorizzata in un file system come un file o in un database come una stringa di testo.

Il tuo software può determinare le prime domande di un gruppo, leggerlo da DB o da FS, presentarlo all'utente in base a Type e altri parametri, quindi eseguire uno script, situato in un campo Next question per capire dove vai avanti.

DSL dovrebbe essere estensibile. Il tipo potrebbe essere una stringa arbitraria e il tuo software può (o non può) convertirlo in enum o qualsiasi altra cosa da passare a un question asker factory , che creerà un appropriato presentatore di domande e altri oggetti, necessari per rispondere alla domanda.

Lo script è scritto qui in uno pseudocodice, è possibile progettarlo come una funzione, ad esempio, che passa alcuni oggetti di dominio per eseguire attività di alto livello (calcoli complessi, finestre di dialogo che mostrano funzioni, ecc.). Dovrebbe essere semplice.

Le risposte possono anche essere mantenute in una tabella come ( question_id , user_id , answer_data ).

Ti va bene?

    
risposta data 29.05.2016 - 18:28
fonte

Leggi altre domande sui tag