0

プロセスとタスク (.NET API クラスではない) で構成される小さなフレームワーク コンポーネントを作成しました。

プロセスには複数のタスクを含めることができます。

プロセス内には、各タスクで使用できるパラメーターのリストがあります。

要件は
1. タスクは DI から取得する必要があります
。 2. パラメータのリストはプロセスから所有され、すべてのタスクで使用できる必要があります。タスクはパラメーターを読み取り、いくつかのパラメーターを追加することもできます

現在の実装 -> Initialize メソッドは、BaseTask (すべてのタスクの派生元) と BaseProcess (すべてのプロセスの派生元) で指定されています。これは、パラメーター リストを引数として受け入れます。

そのような問題の設計パターンはありますか?

4

1 に答える 1

0

実際にタスクを Process に直接埋め込む代わりに、タスクにファクトリを使用することもできます。その最も単純な形式はデリゲートです。

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。これは、状態管理が完全にうまくいかない限り、エラーを発生させる可能性のある初期化されていないタスクを持つ可能性があるため、私の意見では決して理想的なパターンではありません。

于 2012-12-21T08:50:57.590 に答える