2009-03-06 4 views
1

나쁜 질문 제목에 대해 사과합니다.OOD : 계산 된 값을 나타내는 다중 개체

기본적으로 시작일과 종료일로 구성된 DateRange 클래스가 있다고 가정 해 보겠습니다.

내 질문은 : "이번 주", "지난 2 주", "지난 달"및 "이번 분기"와 같은 계산 된 기간을 여러 클라이언트가 이러한 계산 된 기간을 사용할 수 있도록 어떻게 표시 할 수 있습니까? 일관된 방식으로? 즉, "이번 주"가 무엇인지 알아야하는 여러 클래스의 여러 개체를 갖게 될 것입니다.

DateRange에 이들을 빌드 할 수 있지만 더 많은 기능이 추가되거나 시간이 지남에 따라 쓸모 없게 될 수 있기 때문에 좋은 해결책이 아닙니다. 실제로이 문제가 실제로 발생합니다. 나는 DateRange 추상을 만들었고 그것을 확장 할 수 있었지만 그때 나는 작은 클래스들을 가질 것이다. 이 날짜를 계산하는 일종의 정적 도우미 클래스를 만들 수 있습니다. 이 문제에 어떻게 접근 할 수 있습니까?

dateRange = new DateRange (RangeEnum.THISWEEK));

또는

dateRange = new ThisWeek();

또는

DATERANGE DateHelper.getThisWeek =();

또는

?

이 항목에 추가 렌치를 던지려면 "2008 년 5 월 1 일을 포함하는 근무 주"와 같은 범위를 나타내야한다고 가정 해 봅시다. 그 사실을 알았을 때, 나는 도우미 클래스에 기대고있다 ... 그것은 어색한 방법의 큰 덩어리를 갖는 것을 어색하게 느낀다.

답변

1

나는 도우미 클래스와 함께 할 것입니다. 네 말이 맞아

DateRange dr = Helper.getThisWeek(); 

, 당신은 무리에게 방법을 얻을 것이다, 그러나 당신이 뭔가를 서브 클래 싱 할 경우 클래스의 무리를 얻을 수 있습니다. 이렇게하면 어디에서 봐야할지 확실히 알 수 있습니다.

3

왜 헬퍼 클래스를 만드십시오. .NET 프레임 워크에서 사용되는 일반적인 관용구는 기존 클래스에 정적 속성을 추가하는 것입니다.

class DateRange 
{ 
    DateRange ourCurrentWeek = null; 

    public static DateRange ThisWeek 
    { 
      get 
      { 
       //create ourCurrentWeek if not yet assigned. 
       //test current week; is it still correct or does it need updating 
       return ourCurrentWeek; 
      } 
    } 
} 

사용법은 간단하다 : -

DateRange.ThisWeek 
+0

의미가있다. 본질적으로 "헬퍼 클래스"개념은 DateRange 클래스에 통합되었습니다. 그것은 한 손으로이 힘이 DateRange가해야 할 필요가없는 비즈니스 요구 사항에 대해 너무 많이 알고있는 것처럼 느껴집니다 ... 반면에 간단하고 큰 문제는 아닙니다. – Boden

+0

@Boden : DateRange 클래스를 비즈니스 개체 또는 시스템 인프라 개체 중 어떤 것으로 간주하는지에 따라 다릅니다. 금융 시스템에서는 ThisWeek, Month 또는 Quarter를 구성하는 요소가 다를 수 있으므로 해당 정의가 비즈니스 개체에 있어야합니다. – AnthonyWJones

관련 문제