2012-11-21 1 views
0

은 가정하자 내가 아주 기본적인 작업 클래스를 사용합니다.권장 디자인 패턴 (들)을 다음과 같이

public interface IPlannable 
{ 
    public void CalculatePlan(); 
    public DateTime Start { get; } 
    public DateTime Finish { get; } 
} 

두 개의 콘크리트 알고리즘, 다른 입력 매개 변수와 각 :

public class PlanStrategyA : IPlannable 
{ 
    private int parameter1; 
    private int parameter2; 
    private DateTime start; 
    private DateTime finish; 

    public PlanStrategyA(int p1, int p2) 
    { 
     parameter1 = p1; 
     parameter2 = p2; 
    } 

    public void CalculatePlan() 
    { 
     // ... uses parameter1 & parameter2 
     // ... to calculate start and finish 
    } 

    public DateTime Start { get { return this.start; } } 

    public DateTime Finish { get { return this.finish; } } 
} 

public class PlanStrategyB : IPlannable 
{ 
    public int parameter3; 

    // ... the rest is similar to PlanningStrategyA 

} 

질문은 다음과 같습니다

최고의 디자인 패턴 무엇 사용 분명히 내가 좋아하는 뭔가를해야합니다 기본 작업 클래스를 구체적인 계획 전략에 OPTION으로 연결합니다. 즉, 모든 작업이 계획되어야하는 것은 아닙니다. 계획 행동이 있습니까?

사용자는 계획 할 작업을 "승격"하고 특정 작업에서이 동작을 "제거"할 수 있어야합니다.

특히 데이터베이스에서 읽을 때 EF 나 다른 ORM을 통해 데이터베이스에 지속되는 방법은 무엇입니까? 어떤 패턴이 DB에서 가장 잘 읽고 내 작업 객체를 다시 만들 수 있을까요?

답변

0

여기에 2 가지 뚜렷한 문제가있는 것으로 보입니다. 하나는 계획 가능한 작업을위한 전략 알고리즘입니다.이를 처리하려면 Strategy pattern을 사용할 수 있습니다. 계획 할 수없는 작업에 대해서는 가능한 두 가지 접근 방식을 볼 수 있습니다.

  1. 디자인 패턴의 범위에서 제외하십시오. 완벽하게 OK입니다. 필요하지 않은 경우 패턴을 설계에 적용해서는 안됩니다.
  2. 2 수준 전략 - 상위 수준은 작업이 계획 가능한지 여부와 전략을 적용하기위한 낮은 수준 (계획 가능한 경우에만)을 선택합니다.

다른 하나는 각 작업에 대해 가능한 동작 집합입니다. 이것은 Composite pattern으로 처리 할 수 ​​있습니다. 어떤 행동도 행동이 아닙니다.

+0

답변 해 주셔서 감사합니다. 나는 그렇게 생각하지만, 계획을 세울 필요가 없다면 나에게 무엇을 해야할지 명확하지 않다. 만약 내가 클래스 작업에 변수를 가지면 : 'private IPlannable p;' 태스크가 계획되지 않을 때 null로 유지해야하며 (예 : 인스턴스화되지 않음) "더미"구체적인 전략을 사용하는 것이 좋습니다. 추가 매개 변수없이, 그리고 빈'CalculatePlan()'메소드를 사용하고 있습니까? – buggy08

+0

Answer – SomeWittyUsername

+0

alt (1)에 표시된대로 기본 Task 클래스를 가져야한다는 것을 의미합니까? 추가 변수 IPlannable이있는'class PlannableTask : Task'를 상속합니까? 좋은 접근 방식이라고 생각하지 않습니까? – buggy08