Sau khi nhận xét về điều này question. Tôi bắt đầu nghiên cứu nhưng tôi vẫn còn bối rối.
Thực thể cần chuyển thành Dto trước khi quay lại bộ điều khiển? Với tôi nó nghe có vẻ không thực tế.Các thực thể mùa xuân nên chuyển đổi thành Dto trong dịch vụ?
Trả lời
Chúng ta đang nói về kiến trúc phần mềm và như mọi khi chúng ta đang nói về kiến trúc phần mềm, có hàng nghìn cách làm điều gì đó và nhiều ý kiến về cách tốt nhất là gì. Nhưng không có cách nào tốt nhất, mọi thứ đều có lợi thế và bất lợi. Giữ nó trong tâm trí!
Thông thường bạn có các lớp khác nhau:
- Một lớp kiên trì để lưu trữ dữ liệu
- lớp kinh doanh để hoạt động trên dữ liệu
- Một lớp trình bày để lộ dữ liệu
Thông thường, mỗi lớp sẽ sử dụng loại đối tượng riêng của mình:
- Persistence Layer: Repositories, Tổ chức
- Business Layer: Dịch vụ, Domain Objects
- Presentation Layer: kiểm soát, DTOs
Điều này có nghĩa mỗi lớp sẽ chỉ làm việc với các đối tượng riêng của mình và không bao giờ vượt qua chúng để một lớp khác.
Tại sao? Vì bạn muốn mỗi lớp được tách ra khỏi các lớp khác. Nếu bạn sẽ sử dụng các thực thể trong bộ điều khiển của bạn, bản trình bày của bạn sẽ phụ thuộc vào cách dữ liệu của bạn được lưu trữ. Nó rất là tệ. Chế độ xem của bạn không liên quan gì đến cách dữ liệu được lưu trữ. Nó thậm chí không nên biết rằng hoặc làm thế nào dữ liệu được lưu trữ.
Hãy nghĩ rằng: Bạn thay đổi mô hình cơ sở dữ liệu của mình, ví dụ: bạn thêm một cột mới vào một trong các bảng cơ sở dữ liệu của bạn. Nếu bạn truyền các thực thể cho bộ điều khiển của bạn (hoặc tệ hơn: bộ điều khiển của bạn cho thấy chúng dưới dạng JSON), một thay đổi tại cơ sở dữ liệu sẽ dẫn đến thay đổi trong bản trình bày của bạn. Nếu các thực thể được hiển thị trực tiếp dưới dạng JSON, điều này thậm chí có thể dẫn đến những thay đổi trong JavaScript hoặc một số ứng dụng khách khác đang sử dụng JSON. Vì vậy, một thay đổi đơn giản trong cơ sở dữ liệu có thể yêu cầu thay đổi trong giao diện người dùng JavaScript, bởi vì bạn ghép các lớp của bạn rất chặt chẽ. Bạn chắc chắn không muốn điều đó trong một dự án thực sự.
Làm cách nào? Bạn nghi ngờ rằng đây là thực tế, vì vậy chỉ cần một ví dụ nhỏ về cách để làm điều đó trong (giả) mã:
class Repository {
public Person loadById(Long id) {
PersonEntity entity = loadEntityById(id);
Person person = new Person();
person.setId(entity.getId());
person.setName(entity.getFirstName + " " + entity.getLastName());
return person;
}
}
Trong ví dụ này, kho của bạn sẽ sử dụng các đơn vị nội bộ. Không có lớp nào khác biết hoặc sử dụng thực thể này! Chúng là một chi tiết thực hiện của lớp đặc biệt này. Vì vậy, nếu kho lưu trữ được yêu cầu trả về một "người", nó hoạt động trên thực thể, nhưng nó sẽ trả về một đối tượng miền. Vì vậy, các lớp miền mà làm việc với repo được lưu trong trường hợp các thực thể cần phải được thay đổi. Và như bạn có thể thấy trong trường hợp của tên, tên miền và cơ sở dữ liệu có thể khác nhau. Trong khi cơ sở dữ liệu lưu trữ tên trong tên và họ, tên miền chỉ biết một tên duy nhất. Đó là một chi tiết của sự kiên trì như thế nào nó lưu trữ tên.
Cũng vậy với bộ điều khiển và DTO, chỉ một lớp khác.
- 1. Dịch vụ Jersey REST là Thành phần mùa xuân
- 2. Thực thể chuyển đổi DTO với JPA
- 3. Tôi có nên chuyển đổi một thực thể thành một DTO bên trong một đối tượng Kho lưu trữ và trả lại nó cho lớp dịch vụ không?
- 4. Mùa xuân - không thể chuyển đổi javax.mail.session
- 5. tạo các dịch vụ nghỉ ngơi mùa xuân mà không sử dụng khởi động mùa xuân
- 6. AOP mùa xuân ở Tầng dịch vụ
- 7. Sử dụng Trình xác thực mùa xuân trên các dịch vụ Web
- 8. giao dịch Boundary và DTO chuyển đổi với JPA
- 9. Bảo mật mùa xuân Dịch vụ RememberMe với Cookie phiên
- 10. DTO để thực thể và thực thể cho DTO
- 11. Dịch vụ khởi động mùa xuân để tải xuống tệp
- 12. Bảo mật mùa xuân đảm bảo lớp dịch vụ, lớp dịch vụ web hoặc cả hai?
- 13. Mùa xuân: Tải lên tệp Dịch vụ Web RESTFUL
- 14. Mùa xuân :: Nếu một ngã ba một chủ đề mới sẽ được thực thi trong giao dịch của mùa xuân
- 15. Trong các Dịch vụ Web RESTful, các Response DTO có chứa các DTO con của chúng không?
- 16. Thử nghiệm tích hợp Dịch vụ Khởi động mùa xuân bằng dịch vụ Eureka
- 17. Share DTO đối tượng giữa các dịch vụ WCF
- 18. Chuyển đổi tính năng trong ngữ cảnh mùa xuân
- 19. Chuyển đổi ứng dụng bảng điều khiển thành dịch vụ?
- 20. Giao dịch mùa xuân làm chậm quá trình hoàn thành
- 21. Dịch vụ REST sử dụng Bảo mật mùa xuân và Xác thực Firebase
- 22. Tôi nên sử dụng cái nào trong khởi động mùa xuân, BOM mùa xuân và IO mùa xuân?
- 23. Mùa xuân 4 và Jersey cho các dịch vụ web REST
- 24. làm cách nào để đăng ký Dịch vụ chuyển đổi tùy chỉnh vào mùa xuân 3/luồng web 2?
- 25. Chú thích giao dịch mùa xuân
- 26. Giao dịch kho lưu trữ JPA trong mùa xuân
- 27. Mùa xuân - Giao dịch chỉ đọc
- 28. Dịch vụ WCF phơi bày DTO hoặc Pháp nhân
- 29. lỗi khi thực hiện giao dịch mùa xuân
- 30. Không thể chuyển đổi String để ngày bởi requestBody vào mùa xuân
Cảm ơn bạn đã giải thích rất rõ ràng. Tôi sẽ xem xét ** lợi thế và bất lợi ** ở đây cho thiết kế tiếp theo. Đối với dự án hiện tại của tôi, tôi không cần nhiều sự tách rời này ở lớp Persistence. Hiện tại tôi chuyển đổi các thực thể trong bộ điều khiển của tôi, Có vẻ như tôi di chuyển một bước xấu, tôi nên làm điều đó tại các lớp dịch vụ. –