DDD: Bisakah objek tidak berubah juga menjadi entitas?

9

Saya telah membaca posting yang tak terhitung jumlahnya tentang perbedaan antara Entitas dan objek Nilai dan sementara saya berpikir bahwa setidaknya secara konseptual saya mengerti bagaimana keduanya berbeda, tampaknya dalam beberapa posting ini penulis menganggap konsep domain tertentu sebagai VO hanya karena itu tidak dapat diubah (dengan demikian keadaannya tidak akan pernah berubah, setidaknya dalam model domain tertentu).

Apakah Anda setuju bahwa jika keadaan suatu objek tidak akan pernah berubah dalam model domain tertentu, maka objek ini seharusnya tidak pernah menjadi entitas? Mengapa?

bckpwrld
sumber
Saya harus belajar beberapa DDD sehingga saya bisa menjawab beberapa pertanyaan ini dengan cerdas. Saya menduga bahwa banyak kesulitan pengembang perangkat lunak dengan konsep-konsep sederhana seperti ini muncul dari anggapan keliru bahwa DDD adalah metodologi pemrograman.
Robert Harvey

Jawaban:

4

Going by the book (Evans, 2004), "Objek yang didefinisikan terutama oleh identitasnya disebut ENTITY". Definisi ini tidak tergantung apakah objek dapat berubah atau tidak berubah. Saya pikir itu jauh lebih kecil kemungkinannya untuk objek yang tidak dapat diubah untuk menjadi entitas dalam domain yang diberikan, jadi itu heuristik yang berguna untuk memutuskan apakah suatu objek adalah "objek nilai" atau "entitas", tetapi itu bukan bagian dari definisi.

Misalnya, katakanlah Anda memiliki entitas yang mewakili karyawan, yang mungkin atau mungkin tidak memiliki atasan langsung. Jika Anda memutuskan untuk mewakili gagasan tidak memiliki atasan langsung sebagai referensi ke objek atasan "null", maka objek atasan "null" dianggap wajar sebagai entitas. Dan Anda mungkin bisa membuat objek "null" ini tidak berubah.

Aidan Cully
sumber
1
+1 Manajer hanya dapat dibaca (tidak berubah) dalam konteks atau subdomain tertentu, tetapi itu tidak berarti manajer tidak memiliki identitas.
Adrian Schneider
Maafkan saya karena padat, tapi saya tidak sepenuhnya mengerti contoh atasan Anda. Apakah Anda mengatakan bahwa dalam domain kami akan memiliki dua konsep yang terkait dengan pengawas? Satu konsep akan mewakili pengawas yang memiliki karyawan yang mereka awasi (dalam kode konsep ini akan diimplementasikan sebagai kelas Supervisor yang bisa berubah) sedangkan konsep lain akan menggambarkan pengawas yang tidak mengawasi karyawan mana pun (dan konsep ini akan diterapkan sebagai nol dalam kode) ?
bckpwrld
@ Bckpwrld Tidak, dia pasti berarti Obyek Null .
maaartinus
2

Cara saya membaca ini adalah bahwa objek nilai adalah objek yang tidak memiliki identitas sendiri dan tidak ada hubungannya dengan keadaannya berubah atau tidak berubah. Ini membuat perbedaan antara entitas dan objek nilai bahwa entitas memiliki kunci utama, sedangkan objek nilai tidak; itu akan memiliki kunci asing untuk entitas yang dimilikinya.

http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/

Saya masih bisa mengubah properti objek nilai, tetapi tidak perlu diidentifikasi secara independen dari entitas itu.

Kevin
sumber
Saya mencampur terminologi dari basis data relasional (kunci utama) sebagai identitas sebagai metafora, tolong jangan menerimanya secara harfiah
Kevin
Setidak-tidaknya untuk pemahaman saya, bahkan jika dalam kode VO diwakili dengan tipe yang bisa berubah-ubah (dengan demikian contoh tipe ini dapat memiliki sifat-sifatnya dimodifikasi), secara konseptual VO ini masih tetap. Jadi, mengubah properti instance yang mewakili VO tertentu berarti bahwa sekarang instance yang sama ini mewakili VO yang berbeda. Dengan kata lain, VOs secara konseptual selalu tidak berubah
bckpwrld