I repository sono cittadini di prima classe nel modello di dominio, quindi dovrebbero operare in termini di linguaggio ubiquo utilizzando entità e oggetti valore. Pertanto, è necessario evitare di denominare i metodi del repository dopo le operazioni CRUD e utilizzando gli ID delle tabelle del database (chiavi primarie) per gestire le entità. Invece dovresti concentrarti sul tuo vocabolario aziendale e cercare di derivare concetti importanti. Molte volte le radici aggregate hanno un'identità chiara nel dominio del problema ed è prassi comune nel mondo DDD modellare tale identità come oggetto valore.
Tornando ai libri. Non sei sicuro del tuo modello di dominio ma forse potresti utilizzare ISBN o simili come ID per i tuoi libri. O potresti voler utilizzare una combinazione di ISBN e altri identificatori generati dal tuo sistema. Ad ogni modo, penso che questo concetto di identità di un libro meriti di essere una parte del tuo modello come oggetto di valore.
A seconda delle tue esigenze questo è ciò che potrebbe essere il tuo repository
public interface BookRepository {
public Book find(ISBN isbn);
public Book find(BookID id);
public void store(Book book);
public void remove(ISBN isbn);
public void remove(BookID id);
public void remove(Book book);
}