2016-01-25 31 views
8

Sử dụng Spring MVC, chúng ta thường thấy lớp Bộ điều khiển, Dịch vụ và Kho lưu trữ. Lớp Repository sử dụng mô hình Entity là một trong một ánh xạ với cơ sở dữ liệu. Tôi đã nghĩ đến những điều sau đây -Kiến trúc MVC DTO/Lập bản đồ/chuyển đổi mô hình

  1. Lớp dịch vụ có nên sử dụng cùng một mô hình Thực thể không?
  2. Lớp dịch vụ có nên sử dụng mô hình miền riêng biệt không? Nếu có thì ánh xạ tới/fro nên được thực hiện trong lớp Dịch vụ?
  3. Lớp điều khiển có nên sử dụng cùng một mô hình Tên miền không?
  4. Lớp điều khiển có nên sử dụng mô hình DTO riêng biệt không? Nếu có thì ánh xạ tới/fro nên được thực hiện trong lớp điều khiển?
  5. Chúng ta có cách nào đơn giản để lập bản đồ mà không cần viết quá nhiều đoạn mã dài không? Tôi đã sử dụng Dozer vài lần trong quá khứ.

Câu hỏi này có thể đã được hỏi nhưng tôi không thể tìm thấy. Vì vậy, xin lỗi cho câu hỏi trùng lặp.

Trả lời

5
  1. Có.
  2. No. Dịch vụ sẽ hoạt động trên mô hình Thực thể được trả về bởi đối tượng Kho lưu trữ.
  3. No. Bộ điều khiển nên sử dụng DTO. DTO phải chứa các trường biểu mẫu và chú thích Xác thực (nếu bạn đang sử dụng JSR303).
  4. Có. Các DTO được sử dụng trong lớp Controller. Các DTO nên trưng ra một hàm tạo chấp nhận mô hình Entity. Việc chuyển đổi mô hình Entity thành DTO được thực hiện trong hàm tạo này. Trường hợp tương tự cho mô hình Entity. Mô hình thực thể cũng nên trưng ra một hàm tạo quá tải chấp nhận đối tượng DTO làm đối số. Việc chuyển đổi mô hình DTO sang Thực thể sẽ xảy ra ở đây.
  5. Hàm tạo quá tải của DTO (mô hình đối tượng là arg) và mô hình thực thể (DTO as arg) là chi tiết.
+0

> Mô hình thực thể cũng nên trưng ra một hàm tạo quá tải chấp nhận đối tượng DTO làm đối số Điều gì xảy ra nếu thực thể của tôi có các thực thể phụ thuộc (tức là mối quan hệ một-nhiều)? Trong DTO, tôi có thể lưu trữ ID tương ứng của chúng, nhưng chuyển đổi DTO -> Thực thể sẽ yêu cầu tìm nạp các thực thể con theo các ID đó. Phương pháp xử lý được chấp nhận là gì? –

+1

Trong trường hợp đó, tạo một đối tượng nhà máy sẽ quản lý việc tạo và chuyển đổi DTO thành mô hình Thực thể. Bạn có thể tiêm dịch vụ của bạn cho đối tượng nhà máy này để tìm các đối tượng theo id của chúng. – Bnrdo

4

1) vâng,

2) không có,

3,4) sử dụng entitys cho đầu ra, nhưng sử dụng CommandObjects và DTOs (nhưng không phải là thực thể) cho đầu vào. Điều này phụ thuộc vào kiến ​​trúc của bạn, nhưng tôi không muốn một khách hàng để maniuplate mọi lĩnh vực của các thực thể của bạn, sau đó bạn cần phải tách các đối tượng được sử dụng để yêu cầu-ánh xạ (commandobjects) từ thực thể miền của bạn.

+0

nơi tôi nên viết mã chuyển đổi từ 'DTO' thành' Entity' và ngược lại? Tôi có nên chuyển đổi đối tượng 'Entity' trong lớp' DTO' bằng cách sử dụng phương thức công khai khác nói 'convertToEntity' và ngược lại HOẶC tôi có nên viết lớp Riêng biệt để làm điều này không? –

+0

Trong các dự án của tôi, tôi sẵn sàng để có mã này trong thực thể. Nhưng tôi trong các projets của tôi cũng có một quy tắc nói rằng: mọi tài sản của một thực thể là tài sản của nhiều nhất một DTO .. ​​ – Ralph

+0

bạn có thể vui lòng cung cấp một ví dụ đơn giản không? –

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