调度任务注册设计

时间:2013-07-24 08:39:18

标签: .net architecture mef

我有一个架构问题。

假设我们有一个调度程序和许多子系统。其中一些子系统可以具有应该由调度程序执行的操作。

我们有两种方法来实现调度任务的注册。

一种方法是在每个子系统中都有一个方法,称为RegisterSchedulerTasks,它将在应用程序启动期间由应用程序中的引导程序调用。在这个方法中,我们将像这样调用静态Scheduler类:

void Handler1(){
}

void Handler2(){
}

void RegisterSchedulerTasks()
{
  Scheduler.RegisterHandler( "E1", Handler1 );
  Scheduler.RegisterHandler( "E2", Handler2 );
}

"E1""E2"是任务的名称,在调度程序配置中具有相应的设置。

另一种方法是使用例如MEF。 每个子系统都将导出一组ISchedulerTask,并且不会强制注册这些任务。 在应用程序的另一端,我们将SchedulerTasksRegistry,它将导入一组这些ISchedulerTask

在所有方法中,我们将在配置中包含一个映射,其中包含每个任务的调度时间表,在两个方法中都按其名称标识。

我倾向于第二种方法,但没有足够的论据。可能唯一的论点是第一种方法意味着更高的子系统静态耦合。

我是对的,第二种方法更好吗?这些方法的论据是什么?

1 个答案:

答案 0 :(得分:0)

在这里,我将使用“责任链”模式。这种模式

  

'通过为多个对象提供处理请求的机会,避免将请求的发送者耦合到接收者。链接reciving对象并沿着链传递请求,直到对象处理它。'

可以找到使用此模式的示例here

我希望这会有所帮助。