Sto facendo un esercizio di base di progettazione orientata agli oggetti per un caso di utilizzo semplice: Un libro può essere taggato con molti tag.Progettazione OO di libri e tag
Ho molte soluzioni e vorrei il vostro input su cui è meglio in termini di principi OOD e maintanability.
Opzione 1
public class Book {
private String title;
//... other attributes
private List<Tag> tags;
}
La cosa che mi preoccupa è che abbiamo mescolato attributi principali di un libro con la categorizzazione supplementare o dati di ricerca. Potrei avere in futuro un requisito in cui determinati Libri non possono essere taggati. In futuro, la classe book può diventare gonfio quando aggiungo più responsabilità: categoria, lista degli utenti che lo leggono, valutazioni ...
Opzione 2
public class TaggedBook extends Book {
private Book book;
private List<Tag> tags;
}
Penso che questo è simile a il pattern Decorator, ma non lo vedo adatto perché non sto estendendo il comportamento.
Opzione 3
disaccoppiare Libri e Tag comnpletely, e utilizzare un servizio per recuperare Tag da un libro (assegnato ogni libro ha un identificativo univoco)
List<Tag> TagService.getTags(Book book)
Tuttavia, non fare trova questa soluzione molto elegante (vero?), e potrei dover inviare due query: una per recuperare il libro, l'altra per i tag.
Sto pensando di applicare le migliori opzioni per altri requisiti: un libro ha un rating, un libro può essere classificati ...
Sto anche pensando di usare un DMS per archiviare libri e oggetti Tag. Poiché non è un database delle relazioni, il suo schema probabilmente corrisponderà al design della classe.
Grazie
Un "tag" non dovrebbe essere un'entità propria? Come in, più di una stringa - potrebbe avere una descrizione e così ... – cHao
Sì, grazie, questo era il mio design originale, ma ho dimenticato di includerlo nella domanda –