2009-03-06 24 views
1

Kötü soru başlığı için özür dilerim.OOD: hesaplanan değerleri temsil eden çoklu nesneler

Temel olarak sadece bir başlangıç ​​tarihi ve bitiş tarihi içeren DateRange sınıfına sahip olduğumu varsayalım.

Soruma Soru: "Bu Hafta", "Geçmiş İki Hafta", "Son Ay" ve "Bu Çeyrek" gibi hesaplanan tarih aralıklarını nasıl temsil edebilirim, böylece birden fazla müşteri bu hesaplanmış tarih aralıklarını kullanabilir tutarlı bir şekilde? Yani, "Bu Hafta" nın ne olduğunu bilmesi gereken birden fazla sınıfın birden fazla nesnesine sahip olacağım.

Onları DateRange içine yapılandırabilirim, ancak bu iyi bir çözüm gibi görünmüyor çünkü daha fazla eklenebilir veya zaman içinde eski olabilir ... aslında bu kesinlikle olur. DateRange özetini yapabilirim ve genişletebilirim, ama sonra bir grup minik sınıfa sahip olacağım. Bu tarihleri ​​hesaplayan bir çeşit statik yardımcı sınıf oluşturabilirim. Bu probleme nasıl yaklaşırsın?

dateRange = new DateRange (RangeEnum.THISWEEK));

veya

Daterange = yeni ThisWeek();

veya

Daterange = DateHelper.getThisWeek();

veya

? Bu şeye ek bir anahtar atmak için, "1 Mayıs 2008 tarihini içeren çalışma haftası" gibi bir aralığı temsil etmem gerektiğini de varsayalım. Bunu söyledikten sonra, yardımcı sınıfa doğru eğildim ... ... bu sadece garip yöntemlerin büyük bir yumruğu olan garip hissettiriyor.

cevap

1

Yardımcı sınıf ile birlikte giderdim. Haklısın

DateRange dr = Helper.getThisWeek(); 

, bir demet yöntemleri alırsınız, ama bir şey alt sınıf olsaydı sen sınıfların bir demet alırsınız. Bu şekilde nereye bakacağınızı kesin olarak biliyorsunuz.

3

Neden bir yardımcı sınıfı oluşturun. .NET çerçevesinde kullanılan ortak deyim, varolan sınıfa Statik özellikler eklemek olabilir.

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; 
      } 
    } 
} 

Kullanımı çok basit: -

DateRange.ThisWeek 
+0

mantıklı Yani. Esasen "yardımcı sınıf" fikri sadece DateRange sınıfına entegre edilmiştir. DateRange, bu zorunluluk gibi iş gereksinimlerini çok fazla bilmemesi gerektiğini bir yandan hissettiriyor ... diğer yandan, basit ve büyük bir anlaşma değil. – Boden

+0

@Boden: Bu, DateRange sınıfını bir iş nesnesine mi yoksa sistem altyapısı nesnesine mi aldığınıza bağlı olduğunu tahmin ediyorum. Finansal sistemlerde, ThisWeek, Month veya Quarter'ı oluşturan değişkenler değişebilir, bu yüzden tanımları bir işletme nesnesinde olmalıydı. – AnthonyWJones

İlgili konular