Voglio modellare eventi e promemoria (TV) e mi chiedo quale sia il modo migliore per modellarlo.
I requisiti sono approssimativamente
- Quando un evento non ha promemoria, è possibile creare un promemoria
- Quando un evento ha un promemoria
- il promemoria può essere cancellato
- viene mostrata un'icona sull'evento
- Esiste una schermata separata che presenta tutti i promemoria
- I promemoria sono memorizzati nel back-end e hanno proprietà multiple
Ovviamente, il nostro dominio reale è più grande e contiene anche canali, registrazioni, ...
Fondamentalmente, abbiamo bisogno di funzioni per
- crea un promemoria
- elimina un promemoria
- ottieni l'elenco di tutti i promemoria
- controlla se un evento ha un promemoria
Questo sembra un problema relativamente semplice, ma mi sto sforzando. Di seguito, ho raccolto una serie di opzioni possibili e apprezzerei molto il tuo feedback.
Opzione 1
L'evento crea promemoria
API eventi
Reminder createReminder() //adds the Reminder to the backend
boolean hasReminder()
API promemoria
void deleteReminder() //removes the Reminder from the backend
static List<Reminder> getAllReminders()
Ma
- l'eliminazione e la creazione di un promemoria sono funzioni simmetriche e quindi mi aspetterei su una singola API (ora sia l'evento che il promemoria hanno un'interfaccia per il back-end)
- Non sono un grande fan della funzione statica su Promemoria. Sembra indicare che un oggetto di ordine superiore dovrebbe esistere
Opzione 2
API promemoria
Reminder createReminder(Event event) //adds the Reminder to the backend
void deleteReminder() //removes the Reminder from the backend
boolean hasReminder(Event event)
static List<Reminder> getAllReminders()
Il vantaggio è che l'API Event non cambia quando si aggiunge la funzionalità Promemoria (= > buona estensibilità wrt, immagino). Ma
- creare un promemoria per un evento (e verificare se un evento ha un promemoria) sembra essere più una funzione su Evento quindi mi aspetterei che siano presenti nell'API eventi
Opzione 3
API eventi
Reminder createReminder() //adds the Reminder to the backend
void deleteReminder() //removes the Reminder from the backend
boolean hasReminder()
static List<Reminder> getAllReminders()
Ma
- getAllReminders () sembra più una funzione su Promemoria
Opzione 4
Crea un ReminderManager / ReminderService (singleton) con la seguente API
Reminder createReminder(Event) //adds the Reminder to the backend
void deleteReminder(Reminder) //removes the Reminder from the backend
boolean hasReminder(Event event)
List<Reminder> getAllReminders()
Questa è la mia opzione preferita ma
- Ciò genera oggetti anemici di evento / promemoria (solo getter e setter ma nessuna logica). Sembra esserci una discussione se questo è un anti-pattern o not