Responsabilità e calcoli dell'oggetto

0

Cercando di capire dove alcune responsabilità si trovano nel seguente esempio. Abbiamo un oggetto Project e un Project può avere% voci% co_de prenotate contro di esso. Ogni voce Time avrà un no. di Time e a Hours . Vogliamo quindi creare un rapporto che mostri un elenco di progetti, la quantità di ore prenotate e il valore di quel tempo.

Quindi la mia domanda è dove dovrebbero arrivare le voci Rate per i calcoli:

public class Project{
   ......
   public IList<Time> TimeEntries {get;set;}
   ......

   public double HoursBooked(){
       this.TimeEntries.Sum(x=>x.Hours);
   }
}

o

public class Project{

   ......

   public double HoursBooked(IList<Time> timeEntries){
       timeEntries.Sum(x=>x.Hours);
   }
}

Lungo linee simili abbiamo alcuni calcoli Time o un Time che dovrà essere convertito in un altro Project se dovessimo passare il Currency come parametro o dovremmo avere un'altra classe puramente responsabile per Currency calcoli che ha proprietà per tutte le raccolte che potrebbero essere necessarie per ottenere il risultato finale?

    
posta Gaz 30.01.2018 - 22:48
fonte

1 risposta

2

La seconda funzione sembra strana. Non ha motivo di essere un membro del progetto, dal momento che calcola le ore in un elenco arbitrario di TimeEntries, indipendentemente dal fatto che abbiano qualcosa a che fare con il progetto o meno. Il progetto dovrebbe essere in grado di gestire le domande sul progetto.

Avere un setter per la lista di TimeEntries è un po 'strano. Perché normalmente il progetto gestiva TimeEntries aggiunto e qualche volta veniva rimosso da esso, e quindi forse usando un elenco per memorizzare tutte quelle voci, ma non visibile al pubblico. Il modo in cui lo fai, qualcun altro deve creare e impostare l'elenco delle voci temporali, che sembra essere una responsabilità del progetto.

Chiediti: chi chiamerà queste funzioni e quale conoscenza dovrebbe avere il chiamante di queste funzioni?

    
risposta data 31.01.2018 - 02:50
fonte