Domanda

Supponendo che tu abbia una classe Photo:

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

Quale sarebbe il posto migliore per verificare se i valori sono stati impostati correttamente. Nel setter corretto o nel metodo Save.

Modifica: cosa succede se si tratta di un metodo di aggiornamento? Se le foto vengono aggiunte tramite un PhotoManager, utilizzando un metodo come PhotoManager.Add (Foto p), qual è il posto migliore per eseguire la convalida.

Cordiali saluti,

È stato utile?

Soluzione

Non lasciare che le tue istanze cadano in uno stato non valido: convalida direttamente nel setter, ecco a cosa serve.

Altri suggerimenti

Se queste sono le uniche opzioni, nel setter proprietà. Separazione delle preoccupazioni impone che Salva debba effettuare il salvataggio e non qualsiasi altra cosa.

Inoltre, questa è la bellezza delle proprietà. Sembrano campi, ma possono avere una logica avanzata dietro l'ottenimento e l'impostazione del valore nel campo di supporto.

Dipende, quando si dispone di dati sufficienti per verificare la correttezza: se la correttezza di FileExtension non dipende dal valore di Title e la correttezza di Title non dipende dal valore di FileExtension, è possibile controllare ciascuno di all'interno dei setter.

Ma se uno di essi dipende dal valore dell'altro e non sai quale sia l'ordine in cui verranno eseguiti i setter, devi controllare Title e FileExtension solo quando li ottieni entrambi. Questo può essere in Salva o in qualche nuovo metodo Check.

Inoltre, forse prima di fare Salva devi controllare se sono stati impostati sia Title che Extenstion.

Quindi, per riassumere, potresti aver bisogno dei seguenti controlli:

  • Verifica la correttezza del titolo: in Title.set
  • Verifica la correttezza di FileExtension: in FileExtension.set
  • Verifica che Title.set e FileExtension.set siano stati eseguiti: in Salva
  • Controlla la "quotazione in co-correzione" di Title e FileExtesion: in Salva

Riguardo al metodo di aggiornamento : ho appreso che ricevi un oggetto Photo con Title e FileExtenstion già impostati. In questo caso, devi decidere se ti fidi che Title e FileExtension siano già stati controllati nella Foto da chiunque li abbia impostati. Se ti fidi, non devi cambiare nulla nella mia proposta sopra. Ma se non ti fidi, allora devi anche verificare la correttezza del titolo e la correttezza di FileExtension in Salva (o, ancora, in qualche nuovo metodo di controllo).

È difficile dirlo con così pochi dettagli. Se ritieni che sia valido che un oggetto si trovi in ??uno stato non valido mentre è in fase di aggiornamento, direi che devi eseguire la convalida nel metodo Salva.

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

o

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
}

Inoltre potrei usare:

public string Title { get; private set; }

public string Extension { get; private set; }

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

Se capisco correttamente la tua domanda, potresti fare entrambe le cose semplicemente con un metodo Validate booleano privato (title, fileExtension) chiamato dall'interno del settor e dai metodi di archiviazione. Se questa convalida è falsa, puoi lanciare un Exception e gestirlo da lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top