Tại sao OK được có trường Id trong các thực thể miền? Tôi đã thấy một số giải pháp cung cấp lớp cơ sở với Id và Id GetHashCode dựa trên Id và Id.DDD: Các khóa chính (Id) và ORM (ví dụ: NHibernate)
Sự hiểu biết của tôi về mô hình miền là nó chỉ nên chứa những thứ liên quan đến miền. Mặc dù trong các trường hợp hiếm hoi (các lệnh có thể theo dõi) Các Id có ý nghĩa, hầu hết thời gian chúng không cung cấp bất cứ điều gì ngoại trừ một cách đơn giản để tham chiếu các đối tượng trong DB/trên giao diện người dùng.
Tôi không thấy lợi ích Bằng/GetHashCode, do việc thực hiện Bản đồ danh tính phải đảm bảo rằng bình đẳng tham chiếu là bình đẳng id.
Kỳ lạ thay, tôi không thể dễ dàng tìm thấy những gì người khác nghĩ về chủ đề này, vì vậy tôi hỏi nó ở đây. Ý kiến chung về việc sử dụng các Id liên quan đến tên miền trong các thực thể miền là gì? Và có bất kỳ vấn đề với NHibernate nếu tôi không thêm Id để thực thể miền của tôi?
UPDATE:
Cảm ơn câu trả lời.
Một số người trong số họ cho rằng có Id là cách duy nhất để ORM thực hiện cập nhật DB. Tôi không nghĩ rằng đây là trường hợp. ORM đã theo dõi tất cả các thực thể được tải từ DB, vì vậy bạn có thể dễ dàng nhận được một Id nội bộ khi cần.
UPDATE 2:
trả lời để Công lý và quan điểm tương tự: gì nếu chúng ta có một ứng dụng web và cần một cách để tham khảo các thực thể giữa phiên? Giống như chỉnh sửa/tài nguyên/id?
Vâng, tôi thấy điều này là nhu cầu cụ thể của giao diện người dùng/môi trường bị ràng buộc, không phải mô hình miền cần. Có một dịch vụ ứng dụng hoặc kho lưu trữ với phương thức GetIdentitity (nhất quán với phương thức Load (nhận dạng)) có vẻ là đủ cho kịch bản này.
Bạn sẽ triển khai GetIdentity như thế nào nếu bạn không có số nhận dạng? Bạn sẽ nhận được đối tượng từ máy khách và bạn phải tra cứu danh tính. Làm thế nào bạn sẽ tìm thấy nó? Nội dung của đối tượng có thể đã được thay đổi trên máy khách. Bạn sẽ không tìm thấy nó nữa. Tôi cũng trả lời các bình luận của bạn cho câu trả lời của tôi. –
Tôi không đề cập đến thực tế khi tôi nhận được một đối tượng từ khách hàng. Trong trường hợp này tôi có thể nhận được một số DTO có một Id (và điều này là có liên quan ngay cả khi tôi không có một DB và lưu trữ tất cả mọi thứ trong bộ nhớ, trong trường hợp này Id trong DTO có thể là một chìa khóa trong một số Hashtable bên trong). Nhưng trước khi gửi đối tượng cho khách hàng, tôi có thể nhận được một Id và thêm nó vào DTO tôi đang gửi. Hoặc chỉ cần gửi một Id trong một số trường hợp. –
Tôi chỉ tìm thấy trong các tài liệu NH mà NH không cần một tài sản id! Xem câu trả lời của tôi, tôi đã thêm một phần. –