2012-12-21 1 views
0

.NET Framework 클래스가 아닌 프로세스와 작업으로 구성된 작은 프레임 워크 구성 요소를 만들었습니다.다른 클래스의 매개 변수를 전달하는 방법

프로세스는 여러 작업을 포함 할 수 있습니다.

이제 프로세스 내에서 각 작업에 사용할 수있는 매개 변수 목록이 있습니다.

요구 사항은
1. 작업 DI
매개 변수의 목록이 프로세스에서 소유 (2)로부터 와야하고, 모든 작업에 사용할 수 있습니다. 작업은 매개 변수를 읽고 매개 변수를 추가 할 수도 있습니다.

현재 구현 -> 초기화 메서드는 모든 작업이 파생 된 BaseTask 및 모든 프로세스가 파생 된 BaseProcess에 지정됩니다. 이 인수로 매개 변수 목록을 받아들입니다.

이러한 문제에 대한 디자인 패턴이 있습니까?

답변

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 방법에 대한 필요성과 수행, 그것은 초기화되지 않은이 할 수있는 이상적인 패턴의 적이 있기 때문에 당신의 국가 관리가 절대적으로 치열하지 않으면 오류가 발생할 수 있습니다.