Ho due classi commerciali: TimesheetDay e TimeSlot. One TimesheetDay può avere uno o più TimeSlots.
Le classi TimesheetDay e TimeSlot dipenderanno da un oggetto che implementa un'interfaccia corrispondente di TimesheetDayData e TimeSlotData. In questo modo, posso scrivere classi di dati per mappare gli oggetti in un database MySQL, ma se uso un altro modo per archiviare i dati in futuro, posso iniettare oggetti da un dataclass diverso.
Questi oggetti non creeranno altri oggetti e mi rifiuto di usare la parola chiave "nuova" in essi. Voglio che siano testabili in completo isolamento.
Ad esempio, istanzio un oggetto TimesheetDay come questo (in un contenitore):
$mTimesheetDayData = new TimesheetDayMysqlData($databaseHost, $timesheetDayId);
$mTimesheetDay = new TimesheetDay($mTimesheetDayData);
Gli oggetti TimeSlot saranno costruiti nello stesso modo:
$mTimeSlotData = new TimeSlotMySqlData($databaseHost, $timeSlotId);
$mTimeSlot = new TimeSlot($mTimeSlotData);
Il mio problema sta nell'ottenere oggetti TimeSlot contenuti in TimesheetDay. Non posso avere la classe TimesheetDay che crea oggetti. Altrimenti, potrei scrivere un metodo che restituisce una matrice di oggetti TimeSlot, qualcosa del tipo:
$timeSlotsForThatDay = array();
$timeSlotsForThatDay = $mTimesheetDay->getTimeSlots();
Ma ciò richiederebbe il metodo getTimeSlots () per creare oggetti.
Come gestiresti questo?