DDD: Các đối tượng bất biến cũng có thể là thực thể?


9

Tôi đã đọc vô số bài đăng về sự khác biệt giữa các đối tượng Thực thể và Giá trị và trong khi tôi nghĩ rằng ít nhất về mặt khái niệm tôi hiểu hai loại khác nhau như thế nào, có vẻ như trong một số bài viết này, các tác giả coi một khái niệm miền cụ thể là VO đơn giản vì nó là bất biến (do đó trạng thái của nó sẽ không bao giờ thay đổi, ít nhất là trong mô hình miền cụ thể đó).

Bạn có đồng ý rằng nếu trạng thái của một đối tượng sẽ không bao giờ thay đổi trong mô hình miền cụ thể, thì đối tượng này sẽ không bao giờ là một thực thể? Tại sao?


Tôi đã học được một số DDD để tôi có thể trả lời một số câu hỏi này một cách thông minh. Tôi nghi ngờ rằng khó khăn mà nhiều nhà phát triển phần mềm gặp phải với các khái niệm đơn giản như thế này xuất phát từ quan niệm sai lầm rằng DDD là một phương pháp lập trình.
Robert Harvey

Câu trả lời:


4

Đi theo cuốn sách (Evans, 2004), "Một đối tượng được xác định chủ yếu bởi danh tính của nó được gọi là ENTITY". Định nghĩa này độc lập với việc đối tượng là đột biến hay bất biến. Tôi nghĩ rằng rất ít khả năng một đối tượng bất biến là một thực thể trong một miền nhất định, do đó, nó là một công cụ tìm kiếm hữu ích để quyết định xem một đối tượng là "đối tượng giá trị" hay "thực thể", nhưng đó không phải là một phần của định nghĩa.

Ví dụ: giả sử bạn có một thực thể đại diện cho một nhân viên, người có thể có hoặc không có người giám sát trực tiếp. Nếu bạn quyết định thể hiện ý tưởng không có người giám sát trực tiếp làm tham chiếu đến đối tượng giám sát "null", thì đối tượng giám sát "null" được coi là một thực thể hợp lý. Và bạn có thể làm cho đối tượng "null" này trở nên bất biến.


1
+1 Người quản lý có thể chỉ được đọc (không thay đổi) trong một ngữ cảnh hoặc tên miền phụ cụ thể, nhưng điều đó không có nghĩa là nó không có danh tính.
Adrian Schneider

Hãy tha thứ cho tôi vì sự dày đặc, nhưng tôi hoàn toàn không hiểu ví dụ về người giám sát của bạn. Bạn đang nói rằng trong miền chúng ta sẽ có hai khái niệm liên quan đến người giám sát? Một khái niệm sẽ đại diện cho các giám sát viên có nhân viên mà họ giám sát (theo mã, khái niệm này sẽ được triển khai dưới dạng lớp Giám sát có thể thay đổi) trong khi khái niệm kia sẽ mô tả giám sát viên không giám sát bất kỳ nhân viên nào (và khái niệm này sẽ được thực thi dưới dạng mã) ?
bckpwrld

@bckpwrld Không, anh ấy chắc chắn có nghĩa là một đối tượng Null .
maaartinus

2

Cách tôi đọc điều này là một đối tượng giá trị là một đối tượng không có bản sắc đối với chính nó và không liên quan gì đến việc thay đổi hoặc không thay đổi trạng thái của nó. Điều này tạo ra sự khác biệt giữa một thực thể và một đối tượng giá trị mà một thực thể có khóa chính, trong khi một đối tượng giá trị thì không; nó sẽ có khóa ngoại đối với thực thể mà nó thuộc về.

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

Tôi vẫn có thể thay đổi các thuộc tính của đối tượng giá trị, nhưng nó không cần phải được xác định độc lập với thực thể của nó.


Tôi đã trộn lẫn thuật ngữ từ cơ sở dữ liệu quan hệ (khóa chính) làm danh tính như một phép ẩn dụ, xin đừng mang nó theo nghĩa đen
Kevin

Theo hiểu biết của tôi ít nhất, ngay cả khi các VO trong mã được biểu thị bằng một loại có thể thay đổi (do đó các thể hiện của loại này có thể được sửa đổi các thuộc tính của chúng), về mặt khái niệm các VO này vẫn không thay đổi. Do đó, việc thay đổi một thuộc tính của một thể hiện đại diện cho một VO cụ thể có nghĩa là bây giờ cùng một thể hiện này đại diện cho một VO khác. Nói cách khác, các VO về mặt khái niệm luôn luôn bất biến
bckpwrld
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.