Cara Anda mengajukan pertanyaan (dan mengusulkan dua alternatif) seolah-olah satu-satunya kekhawatiran adalah bahwa driverId masih berlaku pada saat mobil dibuat.
Namun, Anda juga harus khawatir bahwa pengemudi yang terkait dengan driverId tidak dihapus sebelum mobil dihapus atau diberikan driver lain (dan mungkin juga bahwa pengemudi tidak ditugaskan ke mobil lain (ini jika domain membatasi pengemudi hanya untuk dikaitkan dengan satu mobil)).
Saya menyarankan agar alih-alih validasi, Anda mengalokasikan (yang akan mencakup validasi kehadiran). Anda kemudian akan melarang penghapusan saat masih dialokasikan, sehingga menjaga terhadap kondisi ras data basi selama konstruksi, serta masalah jangka panjang lainnya. (Perhatikan bahwa alokasi memvalidasi dan menandai yang dialokasikan, dan beroperasi secara atomik.)
Btw, saya setuju dengan @PriceJones bahwa hubungan antara mobil dan pengemudi mungkin merupakan tanggung jawab yang terpisah dari mobil atau pengemudi. Asosiasi semacam ini hanya akan tumbuh dalam kompleksitas dari waktu ke waktu, karena kedengarannya seperti masalah penjadwalan (driver, mobil, slot waktu / jendela, pengganti, dll ...) Bahkan jika lebih seperti masalah registrasi, orang mungkin ingin historis pendaftaran serta pendaftaran saat ini. Dengan demikian, itu mungkin layak BC sendiri.
Anda dapat memberikan skema alokasi (seperti jumlah boolean atau referensi) dalam BC dari entitas agregat yang dialokasikan, atau dalam BC terpisah, katakanlah, yang bertanggung jawab untuk membuat hubungan antara mobil & pengemudi. Jika Anda melakukan yang pertama, Anda dapat mengizinkan operasi penghapusan (valid) yang dikeluarkan untuk mobil atau pengemudi BC; jika Anda melakukan yang terakhir, Anda harus mencegah penghapusan dari mobil & driver BC dan alih-alih mengirimkannya melalui penjadwal asosiasi mobil & pengemudi.
Anda juga dapat membagi beberapa tanggung jawab alokasi antara BC sebagai berikut. Car & driver BC masing-masing menyediakan skema "alokasi" yang memvalidasi dan menetapkan boolean yang dialokasikan dengan BC itu; ketika alokasi boolean mereka ditetapkan, BC mencegah penghapusan entitas yang sesuai. (Dan sistemnya diatur sehingga BC pengemudi & mobil hanya mengizinkan alokasi dan deallokasi dari penjadwalan asosiasi pengemudi / pengemudi BC.)
Penjadwalan car & driver BC kemudian menyimpan kalender pengemudi yang terkait dengan mobil untuk beberapa periode / jangka waktu, sekarang dan masa depan, dan memberitahukan BC lain tentang deallokasi hanya pada penggunaan terakhir dari mobil atau pengemudi yang dijadwalkan.
Sebagai solusi yang lebih radikal, Anda dapat memperlakukan mobil & pengemudi BC sebagai pabrik catatan sejarah yang hanya ditambahkan, meninggalkan kepemilikan pada penjadwal asosiasi mobil / pengemudi. Mobil BC dapat menghasilkan mobil baru, lengkap dengan semua detail mobil, bersama dengan VIN-nya. Kepemilikan mobil ditangani oleh penjadwal asosiasi mobil / pengemudi. Bahkan jika asosiasi mobil / pengemudi dihapus, dan mobil itu sendiri dihancurkan, catatan mobil masih ada dalam mobil BC menurut definisi, dan kita dapat menggunakan BC mobil untuk mencari data historis; sementara asosiasi / kepemilikan mobil / pengemudi (masa lalu, sekarang, dan berpotensi dijadwalkan di masa depan) sedang ditangani oleh BC lain.
Driver.delete
seharusnya tidak ada. Saya tidak pernah benar-benar melihat domain tempat agregat dihancurkan. Dengan menjaga AR di sekitar Anda tidak pernah bisa berakhir dengan anak yatim.