Sto sviluppando un calendario web in php (usando Symfony2) ispirato a iCal per un mio progetto. In questo momento, ho due classi: una classe "Calendar" e una classe "CalendarCell".
Ecco qui le proprietà delle due classi e le dichiarazioni dei metodi.
class Calendar
{
private $month;
private $monthName;
private $year;
private $calendarCellList = array();
private $translator;
public function __construct($month, $year, $translator) {}
public function getCalendarCellList() {}
public function getMonth() {}
public function getMonthName() {}
public function getNextMonth() {}
public function getNextYear() {}
public function getPreviousMonth() {}
public function getPreviousYear() {}
public function getYear() {}
private function calculateDaysPreviousMonth() {}
private function calculateNumericDayOfTheFirstDayOfTheWeek() {}
private function isCurrentDay(\DateTime $dateTime) {}
private function isDifferentMonth(\DateTime $dateTime) {}
}
class CalendarCell
{
private $day;
private $month;
private $dayNameAbbreviation;
private $numericDayOfTheWeek;
private $isCurrentDay;
private $isDifferentMonth;
private $translator;
public function __construct(array $parameters) {}
public function getDay() {}
public function getMonth() {}
public function getDayNameAbbreviation() {}
public function isCurrentDay() {}
public function isDifferentMonth() {}
}
Ogni giorno di calendario può includere molti eventi del calendario (come appuntamenti o programmi) memorizzati in un database. La mia domanda è: qual è il modo migliore per gestire questi eventi del calendario nelle mie classi? Penso di aggiungere una proprietà eventList in CalendarCell e popolarla con una matrice di oggetti CalendarEvent recuperati dal database.
Questo tipo di soluzione non consente ad altri codificatori di riutilizzare le classi senza db (perché dovrei iniettare almeno un servizio di repository anche) solo per creare e visualizzare un calendario ... quindi forse potrebbe essere meglio estendere CalendarCell (ad esempio in CalendarCellEvent) e aggiungere le funzionalità del database?
Mi sento come se mi mancasse qualche schema di design cruciale!
Qualsiasi suggerimento sarà molto apprezzato!