別のアプリケーションによって埋められるテーブルがあります。このテーブルには、 という属性が含まれていますIsMailSent
。
EF はRequest
、データベース データに基づいて Type のオブジェクトを構築します。
オブジェクトは次のようになります。
public class Request {
int SomeInt;
bool IsMailSent;
SomeObject SomeObject;
}
IsMailSent == false
ここで、すべてのエントリをロードしてこのメールを受信者に送信するサービスを作成したいと考えています。
私の現在のコードは次のように動作します: MailMessageService というクラスが と メソッドを取得しましStart()
たStop()
。メソッドは次のStart
ようになります。
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);
}
このメソッドGetMailMessages
は、 のコレクションを受け取り、 のコレクションをRequest
構築しますMailMessages
。MailMessage
現在、対応する Request オブジェクトへの参照を継承して含むクラスを作成しました。背後にある考え方は、MailService
(メールの送信を担当する) がIsMailSent
プロパティを に設定する必要があるというものtrue
です。
したがって、
Send()
メソッドは設定する必要がありますIsMailSent = true
しかし、これはそれを行うための最良の方法ですか?SOLID Principles を理解しているので、MailService
このプロパティの設定に責任を負うべきではありません (メールの送信に責任があるため) - または間違っていますか?