2009-03-06 7 views
1

Désolé pour le titre de la question erronée. Disons que j'ai une classe DateRange qui consiste simplement en une date de début et une date de fin. Ma question est: Comment puis-je représenter des plages de dates calculées telles que "Cette semaine", "Les deux dernières semaines", "Dernier mois" et "Ce trimestre", de sorte que plusieurs clients peuvent utiliser ces plages de dates calculées d'une manière cohérente? Autrement dit, je vais avoir plusieurs objets de plusieurs classes qui ont tous besoin de savoir ce que "This Week" est.OOD: plusieurs objets représentant des valeurs calculées

Je pourrais les construire dans DateRange, mais cela ne semble pas être une bonne solution, car il pourrait y en avoir plus ou certains pourraient devenir obsolètes avec le temps ... en fait, cela arrivera très certainement. Je pourrais faire un résumé de DateRange et l'étendre, mais ensuite je vais avoir un tas de classes minuscules. Je pourrais créer une sorte de classe d'aide statique qui calcule ces dates. Comment pourriez-vous aborder ce problème?

dateRange = new DateRange (RangeEnum.THISWEEK));

ou

dateRange = new ThisWeek();

ou

dateRange = DateHelper.getThisWeek();

ou

?

Pour ajouter une clé supplémentaire à cette chose, disons que je dois aussi représenter une plage comme "la semaine de travail contenant la date du 1er mai 2008". En affirmant cela, je me penche vers la classe d'aide ... c'est juste maladroit d'avoir un gros morceau de méthodes loufoques.

Répondre

1

Je voudrais aller le chemin avec la classe d'aide.

DateRange dr = Helper.getThisWeek(); 

Vous avez raison, vous obtiendrez un tas une des méthodes, mais si vous voulez quelque chose de sous-classe, vous aurez un tas de classes. De cette façon, vous savez à coup sûr où regarder.

3

Pourquoi créer une classe d'assistance. L'idiome commun utilisé dans le framework .NET serait d'ajouter des propriétés statiques à la classe existante.

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

L'utilisation est simple: -

DateRange.ThisWeek 
+0

Cela est logique. Essentiellement, l'idée de "classe d'assistance" est simplement intégrée dans la classe DateRange. Il se sent d'une part comme cela oblige DateRange à en savoir trop sur les exigences de l'entreprise qu'il ne devrait pas avoir à ... d'autre part c'est simple et pas un gros problème. – Boden

+0

@Boden: Je suppose que cela dépend si vous considérez la classe DateRange comme un objet métier ou un objet d'infrastructure système. Dans les systèmes financiers, ce qui constitue ThisWeek, Month ou Quarter peut varier de sorte que leur définition doit être dans un objet métier – AnthonyWJones

Questions connexes