Ho un set di oggetti, per il quale gli utenti hanno applicato tag manualmente, qualunque cosa abbiano inventato. Mi piacerebbe implementare un motore di attività, in cui ogni attività potrebbe essere applicata agli oggetti da un tag. Per comodità, mi piacerebbe avere un tag virtuale aggiuntivo "Tutti gli oggetti" per applicare un'attività a tutti gli oggetti, indipendentemente dai tag.
Una singola attività potrebbe richiedere due (o più) serie di oggetti, ad es. "notificami le modifiche apportate a tutti i documenti dal tag X che sono stati pubblicati sul sito Web con tag Y".
Vedo tre modi per implementare questo requisito:
-
Avere un'interfaccia utente e percorsi di codice business separati per il caso "Tutto". Questo potrebbe essere fattibile per casi semplici, ma nel mio caso porta ad avere quattro casi per l'esempio sopra, e potenzialmente anche peggio in altri casi.
-
Avere un'interfaccia utente che consideri il caso "Tutti" come un normale tag (eccetto forse per rendere impossibile rimuovere elementi dal tag), e avere codice aziendale aggiungere automaticamente il tag ogni volta che elencho i tag in l'app o hanno casi speciali per il tag "Tutto" ogni volta che gestisco un tag.
-
Avere un'interfaccia utente e un codice aziendale gestiscono il caso "Tutti" come un normale tag e implementare il tag "Tutti" virtuale a livello di database. Ciò significherebbe utilizzare le viste del database che aggiungerebbero il tag "Tutti" alla tabella dei tag e un'altra vista che aggiungerebbe il tag "Tutti" alla relazione m2m che elenca quali oggetti hanno quali tag.
La terza soluzione sembra la più sana per me, ma non ho molta esperienza con la programmazione a livello di database. Riesco a vedere i pro e i contro delle prime due soluzioni. Quali sono i problemi che potrei incontrare se avessi scelto di implementare la terza soluzione?