我创建了一个由进程和任务(不是.NET API类)组成的小框架组件。
进程可以包含多个任务。
现在,在一个过程中,每个任务都应该有一个参数列表。
要求是
1.任务应来自DI
2.参数列表由Process拥有,并且应该可用于所有任务。任务将读取参数,还可以添加一些参数
当前实施 - > Initialize方法在BaseTask(从中派生所有任务)和BaseProcess(所有进程从中派生)中指定。这接受参数列表作为参数。
这些问题是否有任何设计模式?
答案 0 :(得分:0)
您还可以使用工厂执行任务,而不是将任务直接嵌入到流程中。最简单的形式是代表:
public class Process {
private readonly List<Func<Process, BaseTask>> TaskFactories
= new List<Func<Process, BaseTask>>();
public RegisterTask(Func<Process, BaseTask> taskFactory)
{
TaskFactories.Add(taskFactory);
}
public IEnumerable<Task> CreateTasks() {
return TaskFactories.Select(f => f(this)).ToArray();
//ToArray used to ensure all tasks created here and now.
}
}
这样你就可以编写这样的任务:
public class MyTask : BaseTask {
public MyTask(Process p) {
/* grab parameters from process here */
}
}
然后你可以注册这个任务,给出Process p
这样的:
public void RegisterSomeTask(Process p) {
p.RegisterTask((process) => new MyTask(p));
}
这也消除了对Initialize
方法的需求,在我看来,这种方法从来都不是一个理想的模式,因为除非你的国家管理绝对是爆炸性的,否则可能会有一个未初始化的任务可能会引发错误。上。