Pertanyaan Nilai vs Entity objects (Domain Driven Design)


Saya baru saja mulai membaca DDD. Saya tidak dapat sepenuhnya memahami konsep Entity vs Value objects. Dapatkah seseorang menjelaskan masalah (rawatan, kinerja, dll.) Suatu sistem yang dapat dihadapi ketika objek Nilai dirancang sebagai objek Entitas? Contoh akan sangat bagus ...


76
2017-09-16 18:27


asal


Jawaban:


Berkurang ke perbedaan penting, identitas penting bagi entitas, tetapi tidak penting untuk 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 Alamat mungkin tidak penting.

Objek nilai biasanya dapat direpresentasikan sebagai objek yang tidak dapat diubah; mengubah satu properti dari sebuah objek nilai pada dasarnya menghancurkan objek lama dan menciptakan objek baru, karena Anda tidak begitu peduli dengan identitas seperti halnya konten. Dengan benar, metode contoh Setara pada Nama akan mengembalikan "benar" selama properti objek identik dengan properti dari instance lain.

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

Anda mungkin membuat objek nilai tanpa menyadarinya; kapan saja Anda mewakili beberapa aspek Entitas dengan membuat kelas halus, Anda punya objek nilai. Misalnya, kelas IPAddress, yang memiliki beberapa kendala pada nilai yang valid tetapi tersusun dari tipe data yang lebih sederhana, akan menjadi objek nilai. EmailAddress bisa berupa string, atau bisa juga objek nilai dengan set-set tingkah lakunya sendiri.

Sangat mungkin 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 ketika Anda dapat menyusunnya bersama sebagai Customer.Name; mereka mungkin akan menjadi beberapa bidang dalam database Anda pada saat Anda berpikir tentang ketekunan, tetapi model objek Anda tidak peduli.


89
2017-09-16 19:03



Setiap objek yang secara kolektif didefinisikan oleh semua atribut adalah objek nilai. Jika ada atribut yang berubah, Anda memiliki instance baru dari objek nilai. Inilah sebabnya mengapa objek nilai didefinisikan sebagai tidak dapat diubah.

Jika objek tidak sepenuhnya ditentukan oleh semua atributnya maka ada bagian dari atribut yang membentuk identitas objek. Atribut yang tersisa dapat berubah tanpa mendefinisikan ulang objek. Objek semacam ini tidak dapat ditentukan pada yang tidak dapat diubah.

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


29
2017-10-21 12:19



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

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

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

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


6
2017-09-18 10:07



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


3
2018-03-18 12:59



Saya bertanya tentang ini di thread lain dan saya pikir saya masih bingung. Saya mungkin membingungkan pertimbangan kinerja dengan pemodelan data. Dalam aplikasi Katalog kami, Pelanggan tidak berubah sampai diperlukan. Kedengarannya bodoh - tetapi 'membaca' data pelanggan jauh lebih banyak daripada 'menulis' dan karena banyak banyak permintaan web yang semuanya mengenai 'set aktif' objek, saya tidak ingin terus memuat Pelanggan berkali-kali. Jadi saya menuju jalan yang tidak berubah untuk objek Pelanggan - memuatnya, menyimpannya, dan melayani yang sama dengan 99% permintaan (multi-berulir) yang ingin dilihat Pelanggan. Kemudian, ketika pelanggan mengubah sesuatu, dapatkan 'editor' untuk membuat Pelanggan baru dan membatalkan yang lama.

Perhatian saya adalah jika banyak thread melihat objek pelanggan yang sama dan itu bisa berubah, maka ketika satu thread mulai berubah terjadi kekacauan di yang lain.

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


2
2018-04-21 13:41



Jenis Nilai: 

  • Jenis nilai tidak ada pada dirinya sendiri, tergantung pada jenis Entitas.
  • Nilai Tipe objek milik Objek Jenis Entitas.
  • Jangka waktu dari instance jenis nilai dibatasi oleh jangka hidup dari instance entitas yang memiliki.
  • Tiga jenis Nilai: Dasar (tipe data primitif), Komposit (Alamat) dan Koleksi (Peta, Daftar, Array)

Entitas: 

  • Jenis badan dapat ada sendiri (Identitas)
  • Suatu entitas memiliki siklus hidupnya sendiri. Ini mungkin ada secara independen dari entitas lain.
  • Misalnya: Orang, Organisasi, Perguruan Tinggi, Ponsel, Rumah dll. Setiap objek memiliki identitasnya sendiri

1
2018-01-28 04:24



3 perbedaan antara Entities dan Value Objects 

  • Identifier vs persamaan struktural: Entitas memiliki pengidentifikasi, entitas adalah sama jika mereka memiliki hal yang sama identifier. Nilai Objek di luar tangan memiliki persamaan struktural, kami mempertimbangkan dua nilai benda sama ketika semua bidangnya sama. Objek nilai tidak bisa memiliki identifier.

  • Mutability vs immutability: Value Objects adalah struktur data yang tidak berubah sementara entitas berubah selama waktu hidup mereka.

  • Umur: Obyek Nilai Haruskah Menjadi Entitas


0
2017-11-21 20:40