Abstrakte Wikipedia/Anforderungen an die Objekterstellung
Diese Seite ist derzeit ein Entwurf. Mehr Informationen dazu kannst du evtl. auf der Diskussionsseite erhalten. Übersetzungsadministratoren: Normalerweise sollten Entwürfe nicht für eine Übersetzung markiert werden. |
- Wikifunctions wird eine Vielzahl von Objekten in seinem Hauptnamensraum enthalten.
Jedes Objekt muss genau einen Typ haben und der Typ ändert sich normalerweise nicht.
- Basierend auf dem Typ kann das Objekt Schlüssel haben, die Werte haben können.
- Jeder Wert ist wiederum ein anderes Objekt (der Typ dieses Objekts kann jedoch durch die Definition des Typs des eingebetteten Objekts für den angegebenen Schlüssel eingeschränkt sein).
- Typen können von der Community erstellt und gepflegt (und geändert) werden.
Beispiel: Angenommen, wir möchten ein Objekt des Typs “Datum im gregorianischen Kalender“ erstellen, um ein Datum wie den 7. Mai 1945 darzustellen.
- Der Datumstyp könnte deklarieren, dass er einen Schlüssel für den Monat (einen für das Jahr, einen für den Tag) hat und der Wert des Schlüssels “Monat“ wäre vom Typ “Monat im gregorianischen Kalender“.
- Dieser Typ wiederum wäre eine Aufzählung mit den zwölf möglichen Werten Januar bis Dezember.
Die Werte selbst können ziemlich komplex und manchmal rekursiv sein, sodass die gesamte Struktur ziemlich groß und unhandlich werden kann.
Die Designfrage lautet:
- Wie können Objekte einfach erstellt (und angesehen und bearbeitet) werden?
Hier sind die Schritte:
- Der Beitragende möchte ein Objekt erstellen.
- Er muss zuerst den Typ des zu erstellenden Objekts auswählen. Die Liste der möglichen Typen kann ziemlich lang sein und Beitragende können neue Typen erstellen.
- Basierend auf dem ausgewählten Typ muss der Beitragende Werte für alle Eigenschafts-Schlüssel bereitstellen, für die er Werte bereitstellen möchte oder muss.
- Einige Schlüssel können optional sein oder Standardwerte haben.
- Einige Schlüssel können Listen von Objekten enthalten, entweder von einem bestimmten Typ oder nicht.
- Jeder Schlüssel nimmt ein anderes Objekt. Oft wird der Typ des Objekts, das jeder Schlüssel annimmt, durch den Typ bestimmt, der den Schlüssel definiert, sodass wir bereits wissen, dass dieser Wert von einem bestimmten Typ sein muss.
- Einige Typen haben möglicherweise eine geschlossene kleine Anzahl möglicher Werte (z. B. kann Boolean wahr oder falsch sein, gregorianische Kalendermonate können Januar bis Dezember sein).
- Einige Typen nehmen eine größere Anzahl möglicher Werte an (z. B. abhängig von der von MediaWiki unterstützten Sprache).
- Einige Typen akzeptieren eine unbegrenzte Anzahl möglicher Werte (z. B. könnte ein String ein beliebiger vom Benutzer angegebener Wert sein, eine Zahl könnte eine beliebige vom Benutzer angegebene Zahl sein).
- Fast überall, wo wir einen Wert eingeben können, können wir auch einen Funktionsaufruf eingeben.
- Ein Funktionsaufruf bezieht sich auf eine Funktion, die einen Wert des erforderlichen Typs zurückgibt und die eine Reihe von Argumenten mit bestimmten Typen annehmen kann oder nicht.
- Jedes Argument hat einen Namen. (Tatsächlich sehen Funktionsaufrufe mit Argumenten Typen mit Schlüsseln sehr ähnlich und verwenden möglicherweise das gleiche Design.)
- Argumentwerte können wiederum Funktionsaufrufe sein.
Um ein Beispiel zu geben: Angenommen, wir geben ein Datum ein, wie zuvor erwähnt.
- Wenn wir dort ankommen, wo wir den Wert für den Schlüssel “Monat“ auswählen, können wir statt einem der verfügbaren zwölf Objekte des Typs “Monat des gregorianischen Kalenders“ auch einen Funktionsaufruf eingeben, z. B. um “Monat aus Datum zu erhalten“ mit einem einzigen Argument, das ein gregorianisches Datum annimmt.
- Dieses Argument wiederum könnte ein Funktionsaufruf sein, z. B. um ein “Datum aus dem islamischen Kalender in den gregorianischen Kalender umzuwandeln“, was wiederum ein Argument nimmt, das ein “islamisches Kalenderdatum“ ist und seine eigenen Schlüssel hätte, die jetzt eingegeben werden müssen.
- Dies würde als gesamte Struktur gespeichert und nicht automatisch in “Mai“ umgewandelt werden, also müssen wir die Struktur anzeigen und wieder bearbeitbar machen.
Manchmal kann ein Argument oder ein Schlüssel einen beliebigen Wert annehmen. In diesem Fall müssen wir dem Beitragenden erlauben, zuerst den Typ auszuwählen, bevor er den Wert eingibt.
Idealerweise sollte die Benutzeroberfläche auf Mobilgeräten wirklich gut funktionieren:
- Die Objekte bilden immer Bäume.
- Idealerweise können wir Zweige des Baums einklappen, um uns auf bestimmte Teile des Objekts zu konzentrieren, um es anzusehen und zu bearbeiten.