Dire che sto scrivendo un'applicazione complessa costituita da 3 parti: Servizi (Web API), Pianificatore (servizio Windows) e Web (Progetto MVC). Condividono tutti lo stesso DB. I servizi vengono utilizzati solo per la pubblicazione di dati nel DB. Il Web è usato per interagire con DB: visualizza dati, lo modifica, imposta alcuni flag in esso. Scheduler ha diversi lavori in esso che esegue alcune azioni in base ai dati e ai flag nel DB (inviare e-mail, magari postare alcune cose ad alcuni servizi web - inclusi i nostri Servizi). Tutte queste parti funzionano in modo indipendente, non sanno nulla l'una dell'altra, anche se sto usando la stessa tabella db.Log per la registrazione.
Immaginiamo che come parte del mio lavoro di pianificazione, inserisco qualcosa nei Servizi.
public void MyHourlyJob(IDBContext db, IWebService service, ILogger logger)
{
var files = db.GetUnsentFiles();
foreach(var file in files)
{
try
{
bool success = service.Post(file);
if(success)
logger.Log($"file {file.Name} was posted");
else
logger.Log($"something on the back end went wrong while posting {file.Name}")
}
catch(Exception ex)
{
logger.Log(ex);
}
}
}
Diciamo che se l'errore si è verificato nei Servizi, l'ho effettuato il login e poiché il risultato del post dell'Utilità di pianificazione non ha avuto esito positivo, accedo anche che è successo qualcosa nel back-end. Nel DB avrò due registri dello stesso errore, uno dallo Scheduler (uno generale) e uno dai Servizi (quello dettagliato). Il fatto è che per il debugging e il mantenimento degli scopi, devo abbinare questi due nel database.
Quali principi di progettazione dovrei seguire per essere in grado di farlo?