Sto davvero lottando per trovare un modello di design per un Alerter che sto costruendo. Ecco un esempio forzato di ciò che sto cercando di fare:
Una persona desidera ricevere un avviso in base al tipo di clima (pioggia, neve, sole, ecc.). Una persona ha anche una scelta di metodi di allerta (email, sms, canale allentato, chat room, ecc.)
Ho bisogno di: avere una lezione che includa un tipo di clima. Quindi recupera tutte le persone che si interessano a quel tipo di tempo. Quindi scorre attraverso tutte le persone e invia loro il loro avviso (in base alla preferenza del tipo di avviso della persona).
Sto cercando di stare lontano dall'odore delle istruzioni switch, ma forse non è così brutto come sembra?
Ecco il mio schema di base, ma sembra che dovrebbe essere fatto "meglio":
public class Alerter
{
private readonly WeatherType _weatherType;
public Alerter(WeatherType weatherType)
{
_weatherType = weatherType;
}
public void SendAlerts()
{
var people = PersonRepository.GetPeople(_weatherType);
foreach (Person person in people)
{
switch (person.AlertType)
{
case Email:
var e = new EmailAlerter();
e.SendToPerson(person, _weatherType);
return;
case SMS:
var s = new SmsAlerter();
s.SendToPerson(person, _weatherType);
return;
}
}
}
}