我有一个现有的 C# ASP.NET 应用程序,它带有一个用户界面和各种按钮来启动操作。这些动作对一个单例类进行同步方法调用,我将调用这个类ServiceLayer。该层还初始化数据模型。
我想安排 UI 中的一些操作在一天中的特定时间发生。我相信 Quartz.NET 提供了我需要的所有必要功能。我可以从每个 Job 类(即实现 IJob 接口的类)的 Execute(IJobExecutionContext context) 中成功调用单例类 ServiceLayer 上的方法。但是,出于以下几个原因,我不喜欢使用这种方法:
- 难以进行单元测试(例如,我必须确保在做任何事情之前初始化单例)
- 如果调用许多作业,则扩大规模
- 与同时在单例类上调用多个方法相关的线程安全问题。
我的问题是处理这种情况而不是直接在单例上调用方法的最佳设计模式是什么?我相信我需要以某种方式使用 JobDataMap 但我不确定如何。我应该关注生产者-消费者还是排队方式?