2010-02-15 20 views
6

Tôi đang sử dụng DataNucleus như một triển khai JPA để lưu trữ các lớp của tôi trong ứng dụng web của tôi. Tôi sử dụng một bộ chuyển đổi tất cả đều có toDTO()fromDTO().Thực thể chuyển đổi DTO với JPA

Vấn đề của tôi là, mà tôi muốn tránh toàn bộ DB được gửi qua dây:

  • Nếu tôi tải lười biếng, bộ chuyển đổi sẽ cố gắng để truy cập vào tất cả các lĩnh vực, và nạp sau đó (kết quả là rất háo hức tải).
  • Nếu tôi không tải chậm, tôi sẽ nhận được một phần lớn của DB, vì người dùng chứa các nhóm và các nhóm chứa người dùng, v.v.

Có cách nào để tải một cách rõ ràng một số trường và để những người khác là NULL trong lớp đã tải của tôi không? Tôi đã thử tài liệu DataNucleus không có may mắn.

Trả lời

3

DTO của bạn có thể quá chi tiết. tức là không có kế hoạch có DTO cho mỗi thực thể JPA. Nếu bạn phải sử dụng DTO thì hãy làm cho chúng thô ráp hơn và xây dựng chúng theo cách thủ công.

Gần đây chúng tôi đã có toàn bộ "để DTO hay không để DTO, đó là câu hỏi" thảo luận AGAIN. Yêu cầu đối với họ (đặc biệt là trong bối cảnh của một ứng dụng JPA) thường không còn ở đó, nhưng một trong các đối số CHO DTO có xu hướng là chế độ xem có các yêu cầu dữ liệu thô hơn.

+0

Bạn có nghĩa là, một tập hợp các DTO sẽ được sử dụng bởi mỗi chế độ xem? Giống như người dùng không có trường "nhóm" để gửi tới chế độ xem mà không cần biết nhóm của người dùng, v.v. – WhyNotHugo

+1

Nó thực sự phụ thuộc vào ứng dụng của bạn và cách bạn đang kiến ​​trúc nó. Bạn nói về nó là một ứng dụng Web nhưng trong cùng một hơi thở bạn quan tâm về những thứ được gửi qua dây. Dây gì? Dây giữa máy chủ ứng dụng và cơ sở dữ liệu hoặc dây logic giữa chế độ xem và lớp mô hình/bộ điều khiển hoặc dây giữa cuộc gọi AJAX của trình duyệt và máy chủ? –

+1

Chủ yếu là dây giữa trình duyệt và máy chủ, nhưng tôi cũng muốn giảm dữ liệu máy chủ java của máy chủ DB <-> nhận được ... Tôi đoán tải chậm và sử dụng một lần cho mỗi lượt xem, vì khi chuyển đổi mô hình thành , Tôi sẽ không gây tai nạn lười biếng tải dữ liệu không cần thiết, và tôi chỉ gửi những gì cần xem. Nó hoạt động nhiều hơn (nhiều lớp hơn) nhưng tôi không thấy lựa chọn nào khác. Cảm ơn. – WhyNotHugo