co-IT / application-quiz

1 stars 1 forks source link

Quiz konfigurieren #4

Closed GregOnNet closed 7 years ago

GregOnNet commented 7 years ago

Um das Quiz anpassen und erweitern zu können, sollen Fragen gepflegt werden können.


Hinweise zur Umsetzung

SingleChoice

{
  text: 'Wie lautet der Name der Hauptstadt Nepals?'
  time: 60
  takenTime: 55
  possibleAnswers: [ 'Dresden',  'London', 'Kairo', 'Kathmandu' ],
  givenAnswer: 'Kairo'
}

MultipleChoice

{
  text: 'Wie lautet der Name der Hauptstadt Nepals?'
  time: 60
  takenTime: 55
  possibleAnswers: [ 'Dresden',  'London', 'Kairo', 'Kathmandu' ],
  givenAnswers: [ 'Kairo', 'Dresden']
}

Freetext

{
  text: 'Wie lautet der Name der Hauptstadt Nepals?'
  time: 60
  takenTime: 55
  givenAnswer:  'Kairo'
}
GregOnNet commented 7 years ago

@Strulle Ich habe dir die alte Datenstruktur des Quizes herausgesucht:

{
    "Fragen": [{
        "Text": "Für die Umsetzung welcher der folgenden Prinzipien ist ein IoC Container nützlich?",
        "ZeitFuerFrage": 45,
        "Typ": "MehrfachAuswahl",
        "Antworten": [
            "KISS",
            "Open Closed Principle",
            "DRY",
            "Liskovs Substitution Principle",
            "Dependency Inversion Principle",
            "YAGNI",
            "Principle of Least Astonishment"
        ]
    }, {
        "Text": "Was trifft auf einen statischen Konstruktor zu?",
        "ZeitFuerFrage": 45,
        "Typ": "MehrfachAuswahl",
        "Antworten": [
            "Er ist immer public",
            "Er ist immer private",
            "Er existiert nur für statische Klassen",
            "Er existiert nur für nicht-statische Klassen",
            "Er existiert für statische und nicht-statische Klassen"
        ]
    }, {
        "Text": "Wann ist eine ReadOnly Instanzvariable einer Konstanten vorzuziehen? ",
        "ZeitFuerFrage": 60,
        "Typ": "MehrfachAuswahl",
        "Antworten": [
            "Wenn zur Compile Zeit der Wert der Variable noch nicht feststeht",
            "Wenn zur Laufzeit der Wert noch geändert werden können soll",
            "Wenn das Programm für maximale Performance optimiert sein soll",
            "Wenn Naturkonstanten wie die Schwerkraft darin gespeichert werden sollen",
            "Wenn auf die Variable andere Projekte (=DLLs) einer anderen Solution zugreifen"
        ]
    }, {
        "Text": "Welches Pattern können Sie nutzen, wenn die Oberfläche eines Programms möglichst einfach ausgetauscht werden können soll?",
        "ZeitFuerFrage": 45,
        "Typ": "MehrfachAuswahl",
        "Antworten": [
            "MVP",
            "MVC",
            "MVVM",
            "Code Behind",
            "Keines"
        ]
    }, {
        "Text": "Benennen Sie den Winkel der zwei Uhrzeiger, wenn es 11.50 Uhr ist.",
        "ZeitFuerFrage": 60,
        "Typ": "EinfachAuswahl",
        "Antworten": [
            "5°",
            "15°",
            "30°",
            "Keine der Antworten"
        ]
    }, {
        "Text": "Wie viele Threads führt ein .NET Prozess immer mindestens aus?",
        "ZeitFuerFrage": 45,
        "Typ": "EinfachAuswahl",
        "Antworten": [
            "0",
            "1",
            "2",
            "3",
            "Keine der Antworten"
        ]
    }, {
        "Text": "Nennen Sie die 5 SOLID Prinzipien des Programmierens.",
        "ZeitFuerFrage": 45,
        "Typ": "FreieAntwort",
        "Antworten": null
    }, {
        "Text": "Wie würden Sie in nur einem Satz gute Codequalität beschreiben?",
        "ZeitFuerFrage": 120,
        "Typ": "FreieAntwort",
        "Antworten": null
    }, {
        "Text": "Notieren Sie den Fragetext der vorletzten Frage möglichst wörtlich wieder.",
        "ZeitFuerFrage": 75,
        "Typ": "FreieAntwort",
        "Antworten": null
    }, {
        "Text": "Wenn Ihnen 2 Personen für einen 3-teiligen Prozess zur Verfügung stehen, wie würden Sie den Arbeitsablauf koordinieren?",
        "ZeitFuerFrage": 180,
        "Typ": "FreieAntwort",
        "Antworten": null
    }, {
        "Text": "Wie wiegen Sie einen Elefanten ohne Waage?",
        "ZeitFuerFrage": 240,
        "Typ": "FreieAntwort",
        "Antworten": null
    }]
}
FrankStrieter commented 7 years ago

@GregOnNet Bin nun so weit, dass ich eine Antwortdatei herausschreiben könnte. Um ein einfaches Parsen zu ermöglichen, wäre es meiner Meinung nach sinnvoller, auch bei MultipleChoice-Antworten "givenAnswer" zu verwenden.

Beispielantwort:

{
"Attendee":
  {
  "firstname":"Frank",
  "lastname":"Strieter",
  "email":"frank@strieter.eu"
  }
},
{
"Answers":
  [{
  "questionText": "Wie lautet der Name der Hauptstadt Nepals?",
  "time": 60,
  "takenTime": 55,
  "possibleAnswers": [ 'Dresden',  'London', 'Kairo', 'Kathmandu' ],
  "givenAnswer": [ "Kairo", "Dresden"]
  }]
}
GregOnNet commented 7 years ago

Meinst du das Parsing durch einen server-seitigen Dienst? Wenn ja, sehe ich das nicht kritisch.

Das Mapping am Server kann problemlos dafür eingestellt werden.

Des weiteren impliziert givenAnswer eine einzige Antwort (string), wohingegen givenAnswers auf eine Liste hindeutet (string[]). Aus API-sicht empfehle ich den Singular und Plural beizubehalten.