Come posso progettare le mie classi per includere eventi di calendario memorizzati in un database?

2

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!

    
posta Gianluca78 10.10.2012 - 08:45
fonte

1 risposta

0

to add a eventList property in CalendarCell and populate it with an array of CalendarEvent objects fetched by the database.

Nota: questa non è una soluzione PHP, ma è una soluzione basata su un approccio RDBMS.

Sì, puoi fare ciò che hai suggerito sopra. Altri sviluppatori che non vogliono utilizzare gli eventi potrebbero semplicemente non chiamare il metodo che carica gli eventi. Una cella del calendario e un evento sono 2 cose separate. Quindi, li vedo come 2 classi separate.

Le associazioni tra una cella e un evento (come ci penserei) possono essere qualcosa di simile:

  • Un calenderCell ha 0,1 o più eventi.

  • Un evento appartiene a uno o più calendari (ad esempio, in caso di una conferenza o un'attività che si estende per molti giorni).

Quanto sopra rappresenta un'associazione Many-To-Many.

Hai bisogno di una terza classe "calendarEvnet-MM" che contenga il PK di calendarCell e calendarEvents.

Quindi avresti:

tabella CalendarCell:

claendarCell_ID (chiave primaria) ...

calendarEvent Table:

calendarEvent_ID (chiave primaria) ...

calendarEvnet-MM Table:

calendarEvnet-MM_ID (chiave primaria)

calendarCell_ID_FK (chiave esterna)

calendarEvent_ID_FK (chiave esterna) ...

    
risposta data 10.10.2012 - 16:40
fonte

Leggi altre domande sui tag