2012-05-01 29 views
5

Đối tượng miền có giống với thực thể JPA không? Nếu tôi có một đối tượng giá trị (ví dụ: một hóa đơn đô la), làm thế nào tôi có thể (hoặc thậm chí tôi nên) lưu trữ nó trong kho dữ liệu như một đối tượng tham chiếu?Các đối tượng miền có giống với các thực thể JPA không?

Sự tinh tế của các đối tượng miền là thực thể trong một số trường hợp và các đối tượng giá trị trong các trường hợp khác là gì? Bất cứ ai có thể hướng dẫn tôi đến một bài báo tốt về điều này?

+0

Có, đối tượng miền giống với thực thể JPA – James

+0

Chúng không phải là nếu bạn đang ở trong môi trường Thiết kế điều khiển miền, vì các đối tượng miền có xu hướng mạnh mẽ hơn thay vì đối tượng 'thiếu máu'. Kiểm tra http://stackoverflow.com/questions/5589141/understanding-domain-objects-services –

+2

Điều gì khiến bạn không đặt logic miền trong thực thể? Đó không phải là toàn bộ điểm lập bản đồ các hàng bảng cho các đối tượng thực tế ở nơi đầu tiên? Nếu không, bạn cũng có thể sử dụng HashMaps để biểu diễn dữ liệu từ một hàng trong bảng. – wrschneider

Trả lời

5

"Đối tượng miền" là thuật ngữ khái niệm hơn; "Thực thể JPA" đề cập đến một công nghệ cụ thể hữu ích cho việc triển khai các đối tượng miền.

Nói chung các đối tượng miền tương ứng với danh từ (đơn đặt hàng, hóa đơn, khách hàng, v.v.) trong miền của bạn. Thông thường chúng ta thấy chúng như là gần gũi hơn với cơ sở dữ liệu chứ không phải là các đối tượng truyền dữ liệu thuần túy. Vì vậy, bạn có thể thấy các chú thích ORM trên các lớp bạn sử dụng để triển khai các đối tượng miền của bạn, ví dụ.

Rất nhiều người thực hiện các đối tượng miền theo cách thiếu an toàn - chủ yếu là các thuộc tính với ánh xạ ORM, nhưng không có logic thực trên chính đối tượng miền. Họ đặt logic vào các dịch vụ miền.

Mặt khác, những người ủng hộ thiết kế theo hướng miền đặt logic vào đối tượng miền.

Dù bằng cách nào thì đây là các đối tượng miền trong hệ thống của bạn.

Thực thể JPA là các lớp mà bạn chú thích với @Entity, @Column, @ManyToOne, v.v. Đây là một cách để triển khai đối tượng miền. Bạn có thể quyết định đặt logic miền trên chính các đối tượng, như đã nói ở trên.

0

Trong ngữ cảnh của Thiết kế điều khiển tên miền, chúng không giống nhau. Một đối tượng miền có thể là một tổng hợp có chứa các thực thể và các đối tượng giá trị và nên không biết gì về sự kiên trì. Do đó, nó không nên chứa bất kỳ chú thích JPA nào.

0

Không, đối tượng miền là đối tượng có hành vi phong phú đại diện cho khái niệm có liên quan của doanh nghiệp. Các thực thể JPA là một giải pháp kỹ thuật để tồn tại lâu dài.

0

Đối tượng miền có giống với thực thể JPA không?

Không, chúng không có.

Nếu tôi có đối tượng giá trị (ví dụ: hóa đơn đô la), làm cách nào để (hoặc thậm chí có thể) lưu trữ trong kho dữ liệu dưới dạng đối tượng tham chiếu?

Tôi khuyên bạn nên lưu trữ Đối tượng giá trị bằng @Embeddable. VO không cần @Id, bạn chỉ nên tham chiếu đến chúng từ cha mẹ (chúng được lưu trữ trong cùng một BẢNG như cha mẹ). Trong trường hợp bộ sưu tập sử dụng @ElementCollection.

@Emedded Value Objects thực hiện tốt hơn trong Hibernate:

  • bạn không có NỐI nếu bạn không sử dụng @OneToOne.
  • Bộ sưu tập đối tượng giá trị có thể bị xóa bằng một DELETE và không cần phải được tải trước khi xóa.

Sự tinh tế của đối tượng miền là thực thể trong một số trường hợp và đối tượng giá trị trong các trường hợp khác là gì?

Thực thể là các đối tượng được phân biệt bởi @Id, ngược lại Các đối tượng giá trị được phân biệt bằng giá trị. Các đối tượng giá trị thường được thực hiện như là không thay đổi, trong khi các entites/domain-objects chứa logic businness làm thay đổi trạng thái của nó.

Trong một số trường hợp kinh doanh, bạn cần biểu diễn đối tượng tên miền như đối tượng giá trị, còn gọi là Ảnh chụp nhanh, ví dụ bạn chuyển đến một Tổng hợp khác hoặc xuất bản bên trong Sự kiện miền.

Có ai có thể đưa tôi đến một bài báo hay về điều này không?

Sách: Triển khai thiết kế theo hướng miền, Vaughn Vernon.

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