Il tuo controller dovrebbe chiamare un metodo nel tuo livello aziendale passandogli i parametri necessari per effettuare un salvataggio del commento.
Il metodo del livello aziendale è il metodo "orchestrazione". Sa cosa fare e sa cosa deve fare tutto. Questo metodo a sua volta può chiamare altri metodi privati / pubblici o il metodo di oggetti specializzati per portare a termine il lavoro.
Il punto chiave è che le regole aziendali di ciò che deve accadere quando un commento viene salvato sono incapsulate in un metodo del livello aziendale. Altri controller possono chiamare questo metodo senza dover sapere tutto ciò che deve essere fatto. Allo stesso modo, se è necessario aggiungere ulteriori passaggi nel processo, è sufficiente modificare l'implementazione nel livello aziendale.
public class BusinessLayer
{
public int SaveComment(Comment comment)
{
DataLayer.SaveComment(comment);
NotificationsManager.SendPostAuthorCommentNotification(comment.PostId);
NotificationsManager.SendModeratorNotification(comment.PosId)
SearchManager.InsertIntoFullTextIndex(comment.Id, comment.Description);
}
}
A proposito, queste notifiche e l'indicizzazione del testo completo ecc. dovrebbero essere fatte "fuori banda". Significa che dovresti eseguire un processo esterno per eseguire effettivamente tutto il lavoro. Ad esempio, potresti pubblicare un "messaggio" in una coda di messaggi MSMQ. Ci vuole un istante per pubblicare un messaggio e l'utente che ha postato il commento non aspetta che tutta l'elaborazione sia completata.
È quindi possibile avere un altro processo (o processi) che elabora i messaggi in MSMQ. Questi processi possono impiegare il loro dolce momento per portare a termine il lavoro e questi processi possono utilizzare lo stesso Business Layer (se necessario) oi "manager" per portare a termine il lavoro.
Il design consentirà alla tua applicazione di scalare e quelli che postano commenti vedranno tempi di risposta minimi.