2009-04-21 6 views
0

ich darüber nachzudenken begann, wie die Funktionalität meiner App speichern zu handhaben, und dachte über 2 Möglichkeiten:Implementierung einer Funktion in einem C# Bildmanipulation App speichern

Die Anwendung verfügt über Knoten wie:

Blur 
Contrast 
Sharpen 
Invert 
... 

1. Interpretieren Sie die gespeicherte Datei, wie:

Blur name:"Blur01" Amount:5 
... 

2. in einem selbst ausführbaren Format gespeicherte Datei hat, wie:

Blur blur = new Blur(); 
blur.Name = "Blur01" 
blur.Amount = 5 
... 

Welchen sollte ich gehen? Gibt es einen besseren Weg, damit umzugehen?

Ich möchte die gespeicherte Datei rückwärts und vorwärts kompatibel sein.

EDIT: Danke für alle Antworten. Jeder kann bitte erklären, warum # 2 nicht zukunftssicher wäre? Liegt es daran, dass man den Lade-/Öffnungscode für # 1 ändern kann, aber nicht für # 2?

Antwort

2

Ich würde mit etwas mehr wie die erste Option gehen.

Obwohl ich generell denke, XML wäre ein besserer Ansatz als eine eigene Syntax. Dies ist aus Kompatibilitäts-/Zukunftssicherheitsgründen viel besser als der Versuch, eigene Syntaxparser für Ihre Datei zu erstellen.

Was ist so etwas wie:

<Filters> 
    <Blur Name="Blur01" /> 
    <Sharpen Name="Sharpen01" Amount=5 /> 
</Filters> 
3

Sie wahrscheinlich XML-Serialisierung verwenden könnte, da es allgemein anerkannt ist und von Menschen lesbar. Hier ist ein Tutorial dazu: XML Serialization

0

Speichern Sie es in einer Textdatei?

Wenn das so ist, wäre es nicht besser, es als XML zu speichern?

<Blur> 
<name>Blur01</name> 
<amount>5</amount> 
</Blur> 

Ansonsten bin ich nicht sicher, ob ich verstehe die Frage :)

+0

Ja jede Form von ASCII-Datei. –

1

Ich würde auch mit einer XML-Datei gehen, da dies ermöglicht es Ihnen, die Kompatibilität sowohl vorwärts zu gewährleisten und rückwärts.

Dies liegt daran, dass Sie nach Eigenschaften suchen, anstatt die Datei zeilenweise zu analysieren.

Zum Beispiel, wenn Unschärfe Änderungen von:

<Blur> 
<name>Blur01</name> 
<amount>5</amount> 
</Blur> 

zu:

<Blur> 
<name>Blur01</name> 
<amount>5</amount> 
<feather>true</feather> 
</Blur> 

älteren Versionen der App werden noch in der Lage sein, die Datei zu lesen, da sie nicht für die Feder aussehen Eigentum. Alles, was Sie tun müssen, ist sicherzustellen, dass Sie beim Erstellen Ihrer Objekte Standardwerte festlegen, damit ältere Dateien gelesen werden können, ohne dass die Daten zurückgesetzt werden.

Als Reaktion auf das Update gibt es keinen Grund, warum Sie # 2 nicht zukunftssicher machen könnten. Sie müssten die Versionierung nur selbst durchführen.

1

Der Grund mit einem self-executing „Speicherformat“ im Allgemeinen schlecht ist, dass heute Ihre „Blur“ Funktion könnte wie folgt aussehen:

public class Blur 
{ 
    int Amount = 5; 
} 

aber in der Zukunft, könnten Sie Ihre Unschärfe „System“ verbessern stattdessen so etwas wie haben:

public class Blur 
{ 
    int HorizontalAmount = 5; 
    int VerticalAmount = 10; 
} 

und jetzt, wenn Sie die gespeicherte Datei ausführen, wird es nicht kompilieren länger, weil es nicht mehr ein ‚Betrag‘ Eigentum ist. Um die Abwärtskompatibilität zu erhalten, müssen Sie den Wert "Betrag" so interpretieren, dass er nun HorizontalAmount = 5 UND VerticalAmount = 5 (oder was auch immer) bedeutet.

Also wirklich, auf lange Sicht werden Sie besser von einem interpretierten Dateiformat von Anfang an sein.

+0

Danke, würde die Verwendung von XML-Serialisierung das selbe Problem wie die selbstausführende haben? –

+0

Wenn Sie die automatische verwenden, ist die Antwort ein "allgemein ja", aber es gibt Möglichkeiten, um es. Sie können auch die XML-Serialisierung selbst handhaben und dann lautet die Antwort nein. – JasonRShaver

Verwandte Themen