ユーザーインターフェイスとアクションを開始するためのさまざまなボタンを備えた既存のC#ASP.NETアプリケーションがあります。アクションは、シングルトンであるクラスに対して同期メソッド呼び出しを行います。このクラスをServiceLayerと呼びます。このレイヤーは、データモデルも初期化します。
UIからのアクションの一部を1日の特定の時間に発生するようにスケジュールしたいと思います。Quartz.NETは、これを行うために必要なすべての機能を提供していると思います。各Jobクラス(つまり、IJobインターフェイスを実装するクラス)のExecute(IJobExecutionContextコンテキスト)からシングルトンクラスServiceLayerのメソッドを正常に呼び出すことができます。ただし、いくつかの理由から、このアプローチを使用するのは好きではありません。
- ユニットテストが難しい(たとえば、何かを行う前にシングルトンが初期化されていることを確認する必要がある)
- 多くのジョブが呼び出された場合のスケールアップ
- シングルトンクラスで複数のメソッドを同時に呼び出すことに関連するスレッドセーフの問題。
私の質問は、シングルトンでメソッドを直接呼び出すのではなく、このケースを処理するための最良のデザインパターンは何ですか?どういうわけかJobDataMapを利用する必要があると思いますが、その方法がわかりません。生産者/消費者アプローチまたはキューイングアプローチを検討する必要がありますか?