2009-03-06 26 views
1

對不良問題標題。OOD:表示計算值的多個對象

比方說,我有DATERANGE類,基本上只是由一個開始日期和日期和結束日期的。

我的問題是:我如何表示計算日期範圍,如「本週」,「過去兩週」,「上個月」和「本季」等,以便多個客戶端可以使用這些計算的日期範圍以一致的方式?也就是說,我將有多個類的多個對象,都需要知道「本週」是什麼。

我可以建立他們入日期範圍,但似乎並不像一個很好的解決方案,因爲更可能會增加或有些人可能會隨着時間的推移變得過時....其實這肯定會發生。我可以使DateRange抽象並擴展它,但是然後我會有一堆小類。我可以創建一些計算這些日期的靜態幫助類。你如何解決這個問題?

DATERANGE =新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 2009-03-06 16:16:24