2009-03-02 6 views
1

Vorausgesetzt Sie haben eine Klasse Foto haben:Der beste Ort für Immobilien auf Prüfwerte

class Photo 
{ 
    public string Title {get; set;} 
    public string FileExtension {get; set;} 
    public void Save() 
    { 
    // Save to backing store here 
    } 
} 

Welches ist der beste Ort, um zu überprüfen wäre, ob die Werte korrekt eingestellt wurden. Im Property-Setter oder der Save-Methode.

Edit: Was ist, wenn es eine Update-Methode ist? Wenn Fotos über einen PhotoManager mit einer Methode wie PhotoManager.Add (Foto p) hinzugefügt werden, dann ist dies der beste Ort für die Validierung.

Mit freundlichen Grüßen

+0

Was bedeutet "richtig eingestellt"? Bitte definieren Sie "richtig". –

+0

Korrigieren Sie die Einstellung eines ungültigen Werts für ein Objekt. Zum Beispiel, "Null" für FileExtension –

Antwort

2

Lassen Sie Ihre Instanzen nicht in einen ungültigen Zustand verfallen: validieren Sie das Recht im Setter, dafür ist es da.

+0

Aber es wird nicht schlecht sein, wenn meine Setter eine Ausnahme werfen. –

+0

Wenn Sie eine Ausnahme auslösen, sollten Sie lieber eine Ausnahme auslösen, sobald Sie einen Fehler haben (wenn Sie fehlerhafte Daten erhalten), statt später. – mquander

+0

Ist es nicht ungewöhnlich, dass Eigenschaften Ausnahmen auslösen? –

2

Wenn das sind die einzigen Optionen, dann in der Eigenschaft Setter. Separation of concerns schreibt vor, dass Save das Speichern und nichts anderes tun soll.

Auch das ist die Schönheit der Eigenschaften. Sie sehen aus wie Felder, aber sie können eine verbesserte Logik hinter dem Abrufen und Setzen des Werts im Hintergrundfeld haben.

0

Es ist schwer mit so wenig Details zu sagen. Wenn Sie glauben, dass ein Objekt während der Aktualisierung in einem ungültigen Zustand ist, würde ich sagen, dass Sie Ihre Validierung in der Save-Methode vornehmen müssen.

0

Wenn ich Ihre Frage richtig verstehe, können Sie beide einfach mit einer private boolean Validate(title, fileExtension)-Methode, die aus dem Setter und Speichermethoden aufgerufen wird. Wenn diese Validierung falsch ist, können Sie eine Exception werfen und damit von dort aus handeln.

0
public void Save() 
{ 
    try 
    { 
    // saving 
    } 
    catch(Exception ex) 
    { 
    MessageBox(ex.Message); // roughly 
    } 
} 

oder

public void Save() 
{ 
    if(!IsDataValid) // !(String.IsNullOrEmpty(this.Title) && String.IsNullOrEmpty(this.Extension)) 
    { 
    throw new Exception(); //in fact you need to throw something more concrete 
    } 
    // saving 
} 

Auch konnte ich verwenden:

public string Title { get; private set; } 

public string Extension { get; private set; } 

public Photo(string title, string extension) 
{ 
    this.Title = title; 
    this.Extension = extension; 
} 
1

Es hängt davon ab, wann Sie genug Daten haben, die Richtigkeit zu überprüfen: Wenn die Richtigkeit der Fileextension nicht davon abhängt, Der Wert von Title und die Korrektheit von Title hängt nicht vom Wert von FileExtension ab. Sie können jeden von ihnen innerhalb der Setter überprüfen.

Wenn jedoch einer davon vom Wert des anderen abhängt und Sie nicht wissen, in welcher Reihenfolge die Setter ausgeführt werden sollen, müssen Sie Titel und FileExtension nur überprüfen, wenn Sie beide erhalten. Das kann in Save oder in einer neuen Check-Methode sein.

Vielleicht müssen Sie vor dem Speichern auch prüfen, ob Title und FileExtenstion gesetzt sind.

also zusammenfassen, können Sie die folgenden Prüfungen müssen:

  • prüfen Titel Korrektheit: in Title.set
  • prüfen Fileextension die Korrektheit: in FileExtension.set
  • Überprüfen Sie, ob Title.set und Dateierweiterung.gesetzt wurden ausgeführt: in Speichern
  • überprüfen Sie die „Co-correcntess“ von Titel und FileExtesion: speichern

Im Hinblick auf die Update-Methode: Ich verstehe, dass Sie ein Foto-Objekt mit Titel und FileExtenstion bereits eingestellt erhalten . In diesem Fall müssen Sie entscheiden, ob Sie darauf vertrauen, dass der Titel und die Dateierweiterung bereits im Foto von demjenigen überprüft wurden, der sie festgelegt hat. Wenn Sie ihm vertrauen, müssen Sie in meinem obigen Vorschlag nichts ändern. Aber wenn Sie nicht vertrauen, dann müssen Sie auch die Korrektheit des Titels und die Korrektheit von FileExtension in Speichern überprüfen (oder wiederum in einer neuen Check-Methode).

Verwandte Themen