J'ai un tableau qui est rempli par une autre application. Cette table contient un attribut appelé IsMailSent
.
EF construit mes objets de type Request
en fonction des données de la base de données.
L'objet ressemble à quelque chose comme ceci :
public class Request {
int SomeInt;
bool IsMailSent;
SomeObject SomeObject;
}
Maintenant je veux créer un Service qui chargera toutes les entrées avec IsMailSent == false
et envoyer ce courrier à leurs destinataires.
Mon code actuel fonctionne comme suit : Une classe appelée MailMessageService a obtenu une Start()
et un Stop()
méthode. Le site Start
ressemble à ceci :
public void Start(int delay) {
tokenSource = new CancellationTokenSource();
T = new Task(() => {
MailService ms = new MailService(Res.ServerAddress, int.Parse(Res.ServerPort));
while (true) {
var messages = GetMailMessages(_context.Requests.Where(o => !o.IsMailSent));
ms.Send(messages);
Thread.Sleep(delay);
}
}, tokenSource.Token);
}
La méthode GetMailMessages
reçoit une collection de Request
et construit une collection de MailMessages
. Actuellement, j'ai créé une classe qui hérite de MailMessage
et contient une référence à l'objet de demande correspondant. L'idée sous-jacente est que l'objet MailService
(qui est responsable de l'envoi des courriers) doit définir l'option IsMailSent
à la propriété true
.
Ainsi, le
Send()
La méthode doit définirIsMailSent = true
Mais est-ce la meilleure façon de procéder ? Si je comprends bien les principes de SOLID, la MailService
ne devrait pas être responsable de la définition de cette propriété (puisqu'il est responsable de l'envoi des courriers) - ou ai-je tort ?