it-swarm-id.com

Objek nilai vs entitas (Desain Didorong Domain)

Saya baru saja mulai membaca DDD. Saya tidak dapat sepenuhnya memahami konsep objek Entity vs Value .. Dapatkah seseorang tolong jelaskan masalahnya (rawatan, kinerja, dll.) Yang dapat dihadapi sistem ketika objek Value dirancang sebagai objek Entity? Contoh akan sangat bagus ...

79
StackUnderflow

Dikurangi menjadi perbedaan esensial, identitas penting bagi entitas, tetapi tidak menjadi masalah bagi objek nilai. Misalnya, nama seseorang adalah objek nilai. Entitas Pelanggan dapat terdiri dari Nama pelanggan (objek nilai), Daftar <Order> OrderHistory (Daftar entitas), dan mungkin Alamat default (biasanya objek nilai). Entitas Pelanggan akan memiliki ID, dan setiap pesanan akan memiliki ID, tetapi Nama tidak boleh; umumnya, dalam model objek, identitas suatu Alamat mungkin tidak masalah.

Objek nilai biasanya dapat direpresentasikan sebagai objek tidak berubah; mengubah satu properti dari objek nilai pada dasarnya menghancurkan objek lama dan membuat yang baru, karena Anda tidak begitu peduli dengan identitas seperti halnya dengan konten. Dengan benar, metode instance Equals pada Name akan mengembalikan "true" selama properti objek identik dengan properti instance lain.

Namun, mengubah beberapa atribut entitas seperti Pelanggan tidak menghancurkan pelanggan; entitas Pelanggan biasanya dapat berubah. Identitasnya tetap sama (setidaknya sekali objek telah bertahan).

Anda mungkin membuat objek nilai tanpa menyadarinya; kapan saja Anda mewakili beberapa aspek Entitas dengan membuat kelas berbutir halus, Anda memiliki objek nilai. Sebagai contoh, kelas IPAddress, yang memiliki beberapa batasan pada nilai yang valid tetapi terdiri dari tipe data yang lebih sederhana, akan menjadi objek nilai. EmailAddress bisa berupa string, atau bisa juga berupa objek nilai dengan serangkaian perilaku sendiri.

Sangat mungkin bahwa bahkan item yang memiliki identitas dalam database Anda tidak memiliki identitas dalam model objek Anda. Tetapi kasus yang paling sederhana adalah gabungan dari beberapa atribut yang masuk akal bersama. Anda mungkin tidak ingin memiliki Customer.FirstName, Customer.LastName, Customer.MiddleInitial dan Customer.Title saat Anda dapat menyusun mereka bersama sebagai Customer.Name; mereka mungkin akan menjadi beberapa bidang dalam database Anda saat Anda berpikir tentang kegigihan, tetapi model objek Anda tidak peduli.

91
JasonTrue

Objek apa pun yang secara kolektif ditentukan oleh semua atributnya adalah objek nilai. Jika ada atribut yang berubah, Anda memiliki instance baru dari objek nilai. Inilah sebabnya mengapa objek nilai didefinisikan sebagai tidak berubah.

Jika objek tidak sepenuhnya ditentukan oleh semua atributnya maka ada subset atribut yang membentuk identitas objek. Atribut yang tersisa dapat berubah tanpa mendefinisikan ulang objek. Objek semacam ini tidak dapat didefinisikan dengan tidak berubah.

Cara yang lebih sederhana untuk membuat perbedaan adalah dengan menganggap objek nilai sebagai data statis yang tidak akan pernah berubah dan entitas sebagai data yang berkembang dalam aplikasi Anda.

30
Richard Dorman

Saya tidak tahu apakah yang berikut ini benar, tetapi saya akan mengatakan bahwa dalam kasus objek Alamat, kami ingin menggunakannya sebagai Objek Nilai daripada Entitas karena perubahan pada entitas akan tercermin pada semua objek yang ditautkan ( Seseorang misalnya).

Ambil kasus ini: Anda tinggal di rumah bersama beberapa orang lain. Jika kita akan menggunakan Entity untuk Alamat, saya berpendapat bahwa akan ada satu Alamat unik yang ditautkan oleh semua objek Orang. Jika satu orang keluar, Anda ingin memperbarui alamatnya. Jika Anda akan memperbarui properti Entitas Alamat, semua orang akan memiliki alamat yang berbeda. Dalam hal Obyek Nilai, kami tidak akan dapat mengedit Alamat (karena tidak dapat diubah) dan kami akan dipaksa untuk memberikan Alamat baru untuk Orang tersebut.

Apakah ini benar? Saya harus mengatakan bahwa saya juga masih bingung tentang perbedaan ini, setelah membaca buku DDD.

Selangkah lebih maju, bagaimana ini akan dimodelkan dalam database? Apakah Anda memiliki semua properti dari objek Alamat sebagai kolom di tabel Orang atau apakah Anda membuat tabel Alamat terpisah yang juga akan memiliki pengidentifikasi unik? Dalam kasus terakhir, orang-orang yang tinggal di rumah yang sama masing-masing akan memiliki contoh berbeda dari objek Alamat, tetapi objek-objek itu akan sama kecuali untuk properti ID mereka.

6

address dapat berupa entitas atau objek nilai yang tergantung pada proses bisnis. objek alamat dapat berupa entitas dalam aplikasi layanan kurir tetapi alamat dapat menjadi objek nilai dalam beberapa aplikasi lain. dalam hal identitas aplikasi kurir untuk objek alamat 

3
Dharmesh

Saya bertanya tentang ini di utas lain dan saya pikir saya masih bingung. Saya mungkin membingungkan pertimbangan kinerja dengan pemodelan data. Dalam aplikasi Katalogisasi kami, Pelanggan tidak berubah sampai perlu. Kedengarannya bodoh - tetapi 'membaca' data pelanggan jauh melebihi jumlah 'menulis' dan karena banyak permintaan web semuanya mengenai 'set aktif' objek, saya tidak ingin terus memuat Pelanggan berulang kali. Jadi saya menuju jalan yang tidak dapat diubah untuk objek Pelanggan - muat, simpan, dan sajikan hingga 99% dari permintaan (multi-utas) yang ingin melihat Pelanggan. Kemudian, ketika seorang pelanggan mengubah sesuatu, dapatkan 'editor' untuk membuat Pelanggan baru dan membatalkan yang lama.

Kekhawatiran saya adalah jika banyak utas melihat objek pelanggan yang sama dan itu bisa berubah, maka ketika satu utas mulai berubah maka kekacauan terjadi pada yang lain.

Masalah saya sekarang adalah, 1) apakah ini masuk akal, dan 2) cara terbaik untuk melakukan ini tanpa menduplikasi banyak kode tentang properti.

2
n8wrl

Jenis Nilai:  

  • Jenis nilai tidak ada sendiri, tergantung pada jenis Entitas.
  • Objek Tipe Nilai milik Objek Tipe Entitas.
  • Umur instance tipe nilai dibatasi oleh rentang umur instance entitas yang memiliki.
  • Tiga tipe Nilai: Dasar (tipe data primitif), Komposit (Alamat) dan Koleksi (Peta, Daftar, Array)

Entitas:  

  • Jenis entitas dapat ada sendiri (Identity)
  • Entitas memiliki siklus hidupnya sendiri. Itu mungkin ada secara independen dari entitas lain.
  • Misalnya: Orang, Organisasi, Perguruan Tinggi, Ponsel, Rumah dll. Setiap objek memiliki identitasnya sendiri
2
Premraj

3 perbedaan antara Entities dan Value Objects 

  • Identifier vs struktural kesetaraan: Entitas memiliki identifier, entitas adalah sama jika mereka memiliki Identifier yang sama. bidangnya sama. Objek nilai tidak dapat .__ memiliki pengidentifikasi.

  • Mutability vs immutability: Object Value adalah struktur data yang tidak dapat diubah sedangkan entitas berubah selama Waktu hidup mereka.

  • Umur: Nilai Objek Harus milik Entitas

0
Ramin Farajpour