2012-04-26 53 views
5

Tôi đang làm việc trên một ứng dụng mà người dùng có thể theo dõi nhau, theo cách tương tự với Twitter.DDD: Các đối tượng kết nối là đối tượng thực thể hoặc đối tượng giá trị?

Sau khi đọc lên trên DDD, tôi hiểu rằng người dùng của tôi là đối tượng thực thể - tôi đề cập đến họ bằng ID duy nhất của họ.

Khi một người dùng 'theo dõi' người khác (tức là tạo thành một Kết nối), mối quan hệ được lưu trữ trong một bảng nhiều người. Các trường của nó bao gồm FollowerID, TargetIDStatus. Chỉ có thể có hai bản ghi cho mỗi kết hợp Follower/Target (một Active, một Other khác), vì vậy tôi có thể xác định một cách an toàn các đối tượng dựa trên các thuộc tính của chúng.

Vì vậy, tôi nghĩ rằng đối tượng kết nối của tôi là đối tượng giá trị, không phải đối tượng thực thể, nhưng tôi không chắc chắn. Bạn có thể giúp tôi với quyết định này không?

Trả lời

4

Bạn chính xác rằng các thực thể là duy nhất và mang khái niệm về nhận dạng (nghĩa là chỉ có một người dùng duy nhất có thể tồn tại). A Connection phụ thuộc vào các đối tượng khác User. Nó đại diện cho một số khía cạnh giữa hai người dùng. Khía cạnh đó là liệu có một kết nối hoạt động hay không hoạt động. Không chứa dữ liệu mà người dùng đang kết nối, kết nối không có danh tính. Nó thậm chí có thể có khóa chính của nó trong cơ sở dữ liệu, nhưng từ một quan điểm miền, nó không có bản sắc riêng của nó.

Vì vậy, tôi có thể nói rằng Connection là một đối tượng giá trị.


Để hỗ trợ kết luận của tôi, Microsoft.Net Architecting Applications for the Enterprise, trang 187, nói: lớp đối tượng

Một giá trị đại diện cho một tổ chức trong lĩnh vực mà hầu hết chứa dữ liệu và sống cho dữ liệu mà nó chứa. Đối tượng giá trị là được xác định đầy đủ bằng kết hợp các giá trị chứa trong đó. Mặt khác, đối tượng có cuộc sống và hành vi phong phú của riêng mình bất kể dữ liệu chứa trong đó. Đối tượng thực thể thường là đối tượng với tuổi thọ dài hơn. Một đối tượng giá trị đại diện cho một khía cạnh của một thực thể và có thể chỉ sống liên quan đến một thực thể.

Và cũng trên trang 189:

Một bình luận gì thêm là cần thiết để giải thích sự khác biệt giữa các đơn vị và các đối tượng giá trị. Bạn không cần kho lưu trữ hoặc dữ liệu bản đồ cho một đối tượng giá trị. Bạn chỉ cần một kho lưu trữ cho một thực thể. Kho lưu trữ (hoặc người lập bản đồ) cho một thực thể nhất định chắc chắn sẽ mất việc chăm sóc của tất cả các đối tượng giá trị phụ thuộc vào một thực thể nhất định.

+0

"Không chứa dữ liệu mà người dùng đang kết nối, kết nối không có danh tính" - Kết nối là duy nhất cho kết hợp FollowerID và TargetID. Vì vậy, nếu chúng tôi có một TaregtID và FollowerID mà tôi tin là người dùng, chúng tôi có thể xác định một kết nối. Vậy làm thế nào nó không phải là một đối tượng thực thể? –

+0

@HariSubramaniam, một cách khác để đặt nó giống như [trang web này] (http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/) nói , "Một đối tượng giá trị không thể sống một mình mà không có một thực thể." Nó chắc chắn không phải lúc nào cũng dễ dàng để xác định cái nào, nhưng sau khi suy nghĩ về điều này và nghiên cứu nó, tôi đang nghiêng về phía nó là một đối tượng giá trị. – Matt

2

Một thời gian trước, tôi đã xem một phim hoạt hình về nhà khoa học đã phát minh nhân bản. Mỗi khi anh nhân bản, anh đã phá hủy phiên bản trước. Sau đó, người đang theo dõi cuộc biểu tình đã quyết định làm gián đoạn và phá hoại một phần vì vậy có hai nhà khoa học. Phim hoạt hình kết thúc với một số câu hỏi thú vị tồn tại.

Giá trị so với các đối tượng không phải là có hoặc không có các trường id trong một hoặc một biểu mẫu khác. Điểm là - cách chúng ta nhìn vào các đối tượng đó thông qua phối cảnh miền của chúng ta.Nếu chúng là đối tượng giá trị, thì chỉ có giá trị của chúng quan trọng - nhà khoa học thứ nhất, thứ ba và thứ 53 là như nhau. Nếu chúng ta quan tâm đến bản sắc, nếu chúng ta nghĩ rằng nhân bản thứ ba sẽ không bao giờ giống như nhà khoa học thứ nhất, thì đối tượng của chúng ta là một thực thể.

Các vấn đề liên quan