データベースから電子メールのリストを取得し、60秒ごとに.netメールを使用して送信するWindowsサービスを実装しました。 私はリポジトリパターンを使用して設計しました。ソリューションのフォルダとプロジェクトのスクリーンショットをご覧ください。 Click to see the pictureEF6 Windowsサービスのリポジトリパターン
質問:パターンの面では
- 私は正しい軌道に乗っていますか?各リポジトリのインタフェースとリポジトリごとのサービスを作成します。
- ビジネスロジックの中にはデータベースとは関係がないものもありますが、依然としてリポジトリを作成する必要がありますか、サービスで十分ですか?
私は電子メールを送信してメールを送信しているSMTPサービスクラスを持っていますが、データベースを更新する必要がある各メールを送信していますが、SMTPサービスクラスに更新ロジックを入れるかどうか良い練習ですか?それは私はあなたが正確にどのようなビジネスあなたが持っている要件を達成したいのかわからないんだけど
public class SMTPService : ISMTPService { SmtpClient client; MailMessage newMessage; EmailService emailService; IEventLoggerService MailCheckerLog; public async Task SendEmail(tb_Email email) {...} void SendCompletedCallback(object sender, System.ComponentModel.AsyncCompletedEventArgs e, tb_Email email) { if (e.Cancelled) { } if (e.Error != null) { } else { email.DateSent = DateTime.Now; emailService.Update(email); } client.Dispose(); newMessage.Dispose(); }
}
返信いただきありがとうございます。メールは1つだけです。私はまだUOWが必要ですか?私たちが複数のエンティティを持っているときに役に立ちました。 – user65248
エンティティが1つだけの場合は、その必要はありません。 –
現在、私はSendMailAsyncを使って電子メールを送信し、SendCompleteイベントが発生したときにデータベースの更新を処理しています。 1つのバッチで100以上の電子メールを送信しているので、次の電子メールが処理される前にSendCompleteが起動されないことがあります。dbcontextのusingステートメントで更新メソッドをラップすることによって、 (BBEntities db = new BBEntities()) { db.Entry(obj).State = EntityState.Modified; db.SaveChanges(); } – user65248