Ho studiato Design Patterns e sto cercando di implementarli nel mio ultimo progetto.
Sto lavorando su un servizio di Windows che controlla regolarmente una tabella di database per una nuova voce. A seconda della voce trovata, il servizio eseguirà un numero di processi.
I processi possibili includono:
1) Genera rapporto e invia e-mail con rapporto allegato
2) Esegui query e registra i dati su un'altra tabella
3) Invia email di notifica
Quale modello di design è più adatto? Ho considerato il modello di fabbrica.
Il mio processo di progettazione finora ...
1) Crea interfaccia
2) Crea una classe astratta che implementa l'interfaccia
3) Metodi astratti:
- CheckTable()
- GenerateReport()
- SendEmail()
4) Modello di progettazione di fabbrica:
- The client(windows service) asks the Factory for a new object (based of the database entry found)
- The factory instantiates this and returns to the client
- The client then calls the relevant methods to send email or run query.
Questo sembra corretto? O lo sto rendendo più difficile di così?
O dovrei usare il modello di osservatore?
UPDATE:
OK. Ho seguito il tuo consiglio e ho cercato il modo più semplice per farlo.
Il sottostante è corretto? Ho creato un'interfaccia e quindi una classe per implementare questa interfaccia.
Potrebbero esserci diversi report / email da generare. Dovrebbero essere aggiunti come nuovi metodi nell'interfaccia?
Ho bisogno di una classe astratta?
// interface
internal interface IJobs
{
void SendEmail();
void PublishData();
void GenerateTestReport(string userID, DateTime period);
}
// concrete class
public sealed class JobsFactory : IJobs
{
#region SINGLETON
private static JobsFactory INSTANCE;
private JobsFactory() { }
public static JobsFactory GetInstance()
{
if (INSTANCE == null)
{
INSTANCE = new JobsFactory();
}
return INSTANCE;
}
#endregion
private readonly WorkbookFactory _workbookFactory = WorkbookFactory.GetInstance();
#region IJobs Members
public void SendEmail()
{
// send email
}
public void PublishData()
{
// publish data
}
public void GenerateTestReport(string userID, DateTime period)
{
string reportTestFilePath = this._workbookFactory.BuildTestReportWorkbook(userID, period);
}
#endregion
}