2010-10-03 29 views
5

Tôi có một số đối tượng Java có khả năng tồn tại lâu bền với tất cả các @annotations trong ứng dụng web của tôi. Tất cả các đối tượng này nằm trong một lớp dữ liệu. Có thực tiễn tốt nhất để sử dụng các đối tượng kiên trì này làm đối tượng truyền dữ liệu không? Ví dụ: nếu tôi muốn trả lại dữ liệu được tìm nạp từ kho dữ liệu, tôi có nên trực tiếp trả lại các đối tượng kiên trì đó hay tôi nên sao chép dữ liệu vào DTO trung gian và chuyển nó trở lại các lớp khác không? Không. Bạn sẽ đề xuất phương pháp nào?Các thực thể kiên trì làm đối tượng truyền dữ liệu

Trả lời

1

Tôi có thể nói rằng đó là OK để làm như vậy (trong thực tế, lợi thế lớn cho các ORMs đã sử dụng các đối tượng miền trong các lớp khác nhau w/o có DTOs không cần thiết) nếu bạn làm theo các hướng dẫn sau đây:

  1. Bạn không mở rộng ranh giới phiên tức là, mọi thay đổi liên quan đến cơ sở dữ liệu phải luôn được thực hiện bằng cách sử dụng Lớp truy cập dữ liệu bạn đã xác định và không thông qua các đối tượng được truyền trong các lớp khác.
  2. Bất kỳ dữ liệu nào bạn cần ở lớp khác (các lớp phía trên Lớp truy cập dữ liệu như Lớp logic nghiệp vụ và Lớp trình bày) được điền sẵn trong các đối tượng này nếu không bạn sẽ nhận được ngoại lệ theo hành vi ORM.
  3. Không mở rộng ranh giới phiên để giải quyết vấn đề được đề cập trong số 2
+0

+1 cũng cho biết. Đây chính là cách chúng tôi sử dụng chúng trong sản phẩm của chúng tôi. –

0

Tôi chưa bao giờ cần thêm mức trừu tượng được cung cấp bằng cách sao chép thể hiện kiên trì sang một lớp DTO khác.

1

Nếu bạn hoàn toàn chắc chắn không có bản sao nào sẽ kết thúc trong Bộ nhớ phiên hoặc sẽ được lưu giữ/di chuyển sang một phiên bản khác/bất kỳ điều gì, không cần phải làm điều đó.

Nếu bạn cần giữ các đối tượng này qua nhiều phiên/yêu cầu thì điều đó có ý nghĩa.

Một trường hợp sử dụng khác là khi bạn cần phân tách loginc và lớp kiên trì rất kỹ lưỡng (tức là trao đổi các lớp kiên trì khác nhau) thì khớp nối thông qua các chú thích có thể gây phiền toái.

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