Il modo in cui stai ponendo la domanda (e proponendo due alternative) è come se l'unica preoccupazione fosse che il driverId fosse ancora valido al momento della creazione dell'auto.
Tuttavia, devi anche preoccuparti che il driver associato a driverId non venga eliminato prima che l'auto venga cancellata o assegnata a un altro driver (e possibilmente anche che il driver non sia assegnato a un'altra auto (questo se il dominio limita un driver a solo essere associato a una macchina)).
Suggerisco che al posto della convalida, si alloca (che includerebbe la convalida della presenza). In questo modo, non sarà possibile eliminare le eliminazioni mentre si è ancora allocati, proteggendo così dalle condizioni di gara dei dati non aggiornati durante la costruzione, nonché l'altro problema a più lungo termine. (Si noti che l'allocazione convalida e contrassegna sia allocata che opera in modo atomico.)
A proposito, sono d'accordo con @PriceJones che l'associazione tra l'auto e il conducente è probabilmente una responsabilità separata dall'auto o dal conducente. Questo tipo di associazione crescerà in complessità solo nel tempo, perché sembra un problema di programmazione (guidatori, automobili, fasce orarie / finestrini, sostituti, ecc ...) Anche se è più simile a un problema di registrazione, si potrebbe desiderare una cronologia registrazioni e registrazioni attuali. Pertanto, può benissimo meritare il suo proprio BC.
È possibile fornire uno schema di allocazione (come un conteggio booleano o di riferimento) all'interno del BC delle entità aggregate assegnate o all'interno di un BC separato, ad esempio, quello responsabile per l'associazione tra auto e conducente. Se fai il primo, puoi consentire (valide) operazioni di cancellazione emesse all'auto o al conducente BC; se si esegue quest'ultima operazione, sarà necessario impedire le eliminazioni dai BC dell'auto e dell'autista e invece inviarle tramite lo schedulatore dell'associazione auto e autista.
Potresti anche dividere alcune delle responsabilità di allocazione tra BC come segue. L'auto e il conducente BC forniscono ciascuno uno schema di "allocazione" che convalida e imposta il booleano assegnato con quel BC; quando è impostata la loro allocazione booleana, il BC impedisce la cancellazione delle entità corrispondenti. (E il sistema è configurato in modo che l'automobile e il conducente BC consentano l'allocazione e la deallocazione solo dall'associazione automobile / conducente che pianifica BC.)
La programmazione di auto e conducente BC mantiene quindi un calendario di conducenti associati all'auto per alcuni periodi / durate, ora e futuro, e notifica agli altri BC di deallocazione solo sull'ultimo utilizzo di un'auto o di un conducente programmato.
Come soluzione più radicale, puoi considerare le auto e i conducenti BC come fabbriche di record storici solo appendici, lasciando la proprietà allo schedulatore dell'associazione auto / conducente. L'auto BC può generare una nuova auto, completa di tutti i dettagli dell'auto, insieme al suo VIN. La proprietà dell'auto è gestita dallo schedulatore dell'associazione auto / conducente. Anche se un'associazione auto / conducente viene eliminata e l'automobile stessa viene distrutta, i record dell'auto esistono ancora nell'auto BC per definizione, e possiamo usare l'auto BC per cercare dati storici; mentre le associazioni automobilistiche / automobilistiche / proprietà (pianificate passate, presenti e potenzialmente future) sono gestite da un altro BC.
Driver.delete
non dovrebbe esistere. Non ho mai visto un dominio in cui gli aggregati vengono distrutti. Tenendo gli AR intorno a te non puoi mai finire con gli orfani.