Supponiamo che una classe FileWriter necessiti della convalida che non cancellerà un file già presente, se ne viene trovato uno. Avrebbe due funzioni:
public bool FileExists(string filePath) //...
public bool WriteFile(string filePath, string text) //...
La preoccupazione principale è di non cancellare un file già presente. Una prima interfaccia è in realtà solo l'interazione tramite una console:
public void Save()
{
FileWriter fileWriter;
//...
if (fileWriter.FileExists(filePath))
{
Console.WriteLine("File already exists. Continue? Press 'y' for yes");
if (Console.ReadKey().KeyChar != 'y')
return;
}
fileWriter.WriteFile(filePath, text);
}
E qualche tempo dopo arriva una seconda interfaccia, questa con una GUI, che richiede la stessa interazione con l'utente:
public void SaveButton_click(object sender, EventArgs e)
{
FileWriter fileWriter;
//...
if (fileWriter.FileExists(filePath))
{
if (DialogResult.Yes != MessageBox.Show("File already exists. Continue?", "", MessageBoxButtons.YesNo))
return;
}
fileWriter.WriteFile(filePath, text);
}
Risparmia il modo in cui viene realizzata l'interazione, la logica è la stessa. Quale modello può essere usato per non duplicare questa logica? È una funzione di callback per eseguire la verifica dell'approccio migliore?
Formattato come C #, ma non deve essere specifico per C #.