2009-03-24 92 views
43

Tôi chưa thực sự thấy bất kỳ ví dụ nào, nhưng tôi cho rằng chúng được lưu bên trong bảng thực thể có chứa trong cơ sở dữ liệu.Các đối tượng giá trị được lưu trữ trong cơ sở dữ liệu như thế nào?

Tức là. Nếu tôi có một thực thể Person/tổng hợp gốc và một bảng Person tương ứng, nếu nó có một đối tượng Value được gọi là Address, các giá trị Address sẽ được lưu bên trong bảng Person này!

Điều đó có ý nghĩa đối với một miền nơi tôi có các thực thể khác như Công ty, v.v. có Địa chỉ không?

(Tôi hiện đang viết một ứng dụng quản lý dự án và cố gắng để có được vào DDD)

Trả lời

84

Đó là ok để lưu trữ giá trị gia tăng đối tượng trong một bảng riêng biệt, vì những lý do rất bạn đã mô tả. Tuy nhiên, tôi nghĩ rằng bạn đang hiểu lầm Thực thể vs VOs - nó không phải là một mối quan tâm liên quan đến sự kiên trì.

Dưới đây là một ví dụ:

Giả sử rằng một Công tyPerson cả hai đều có cùng một email Địa chỉ. Câu nào trong số những tuyên bố này hợp lệ?

  1. "Nếu tôi sửa đổi Company.Address, tôi muốn Person.Address để tự động nhận được những thay đổi đó"
  2. "Nếu tôi sửa đổi Company.Address, nó phải không ảnh hưởng đến Person.Address"

Nếu là đúng, Địa chỉ phải là một Entity, và do đó có nó o wn bảng

Nếu là đúng, Địa chỉ phải là một Value Object. Nó có thể được lưu trữ như một thành phần trong bảng của thực thể cha, hoặc nó có thể có bảng riêng của nó (chuẩn hóa cơ sở dữ liệu tốt hơn).

Như bạn có thể thấy, cách Địa chỉ được duy trì không liên quan gì đến ngữ nghĩa Entity/VO.

7

Hầu hết các nhà phát triển có xu hướng suy nghĩ trong cơ sở dữ liệu trước bất cứ điều gì khác. DDD không biết cách xử lý sự kiên trì. Đó là vào kho lưu trữ để đối phó với điều đó. Bạn có thể tồn tại nó dưới dạng tệp xml, sql, văn bản, v.v. Các đối tượng/tập hợp/đối tượng giá trị là các khái niệm liên quan đến miền.

Giải thích bởi Vijay Patel là hoàn hảo.

2

Tôi đã bắt đầu học DDD với cuốn sách Eric Evans và dự án dddsample Cargo xuất sắc làm ví dụ. http://dddsample.sourceforge.net/

Vì vậy, đối với những người (như tôi), những người muốn trở thành hiện thực sự khác biệt trong việc thực hiện quy tắc ứng sắc thái này trong lớp Domain Model, tôi sẽ nói:

Phương pháp overidded Equals hoặc/và sameIdentityAs/SameValueAs (từ giao diện Entity và ValueObject), tôi nghĩ, là nơi diễn đạt của họ.

Nó chỉ feelin tôi :)

Tôi nghĩ thú vị để đọc này quá:

http://martinfowler.com/bliki/ValueObject.html

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