Wie stelle ich die Basiskonfiguration für eine Scala-Anwendung bereit?

8

Ich arbeite an einer kleinen GUI-Anwendung, die in Scala geschrieben wurde. Es gibt ein paar Einstellungen, die der Benutzer in der GUI vornehmen wird und ich möchte, dass sie zwischen den Programmausführungen bestehen bleiben. Im Grunde möchte ich eine scala.collections.mutable.Map, die bei einer Änderung automatisch in einer Datei bleibt.

Dies scheint ein häufiges Problem zu sein, aber ich konnte keine leichte Lösung finden. Wie wird dieses Problem normalerweise gelöst?

    
Dave 18.12.2012, 00:59
quelle

5 Antworten

9

Ich mache eine Menge davon, und ich benutze .properties-Dateien (es ist idiomatisch in Java-Land). Ich halte meine Konfiguration durch Design ziemlich geradlinig. Wenn Sie Konfigurationskonstrukte verschachtelt haben, möchten Sie vielleicht ein anderes Format wie YAML (wenn Menschen die Hauptautoren sind) oder JSON oder XML (wenn Maschinen die Autoren sind).

Hier ist ein Beispielcode für das Laden von Requisiten, das Bearbeiten als Scala-Map und das anschließende Speichern als .properties:

%Vor%     
overthink 18.12.2012, 02:58
quelle
1

Hier ist ein Beispiel für die Verwendung von XML und einer Fallklasse zum Lesen einer Konfiguration. Eine echte Klasse kann schöner sein als eine Karte. (Sie könnten auch tun, was sbt und mindestens ein Projekt tun, nehmen Sie die Konfiguration als Scala-Quelle und kompilieren Sie es; Speichern ist weniger automatisch. Oder als Repl Skript. Ich habe nicht gegooglet, aber jemand muss das getan haben. )

Hier ist der einfachere Code.

Diese Version verwendet eine Fallklasse:

%Vor%

Dieser Code ruft reflektiv das Anwenden einer Fallklasse auf. Der Anwendungsfall ist, dass Felder, die in der Konfiguration fehlen, standardmäßig mit Argumenten geliefert werden können. Keine Typumwandlungen hier. ZB case class Config(foo: String = "bar") .

%Vor%

XML hat loadFile und save , es ist schade, dass es keinen Einzeiler für Properties zu geben scheint.

%Vor%     
som-snytt 18.12.2012 06:43
quelle
1

Da alles darauf hinausläuft, eine Karte / ein Objekt in eine Datei zu serialisieren, haben Sie folgende Auswahlmöglichkeiten:

  • klassische Serialisierung zu Bytecode
  • Serialisierung nach XML
  • Serialisierung zu JSON (einfach mit Jackson oder Lift-JSON)
  • Verwendung einer Eigenschaftendatei (hässlich, keine UTF-8-Unterstützung)
  • Serialisierung zu einem proprietären Format (hässlich, warum erfinde das Rad neu)
Andreas Neumann 18.12.2012 11:35
quelle
0

Ich empfehle, Map in Eigenschaften umzuwandeln und umgekehrt. "* .properties" -Dateien sind Standard zum Speichern der Konfiguration in Java, warum nicht für Scala?

    
kriomant 18.12.2012 02:20
quelle
0

Der übliche Weg ist *. Eigenschaften, * .xml, da scala xml nativ unterstützt, also wäre es einfacher, xml config als java zu verwenden.

    
Qiang Jin 18.12.2012 02:38
quelle

Tags und Links