Tôi hiện đang tạo một API REST cho một dự án và đã đọc bài viết trên bài viết về các thực tiễn tốt nhất. Nhiều người dường như chống lại DTO và chỉ đơn giản là phơi bày mô hình miền, trong khi những người khác dường như nghĩ rằng DTO (hoặc Mô hình người dùng hoặc bất cứ điều gì bạn muốn gọi nó) là thực tiễn tồi. Cá nhân, tôi nghĩ rằng bài viết này có rất nhiều ý nghĩa.
Tuy nhiên, tôi cũng hiểu những hạn chế của DTO với tất cả các mã ánh xạ bổ sung, các mô hình miền có thể giống hệt 100% với đối tác DTO của chúng, v.v.
API của chúng tôi chủ yếu được tạo để các khách hàng khác có thể sử dụng dữ liệu, tuy nhiên nếu chúng tôi làm đúng, chúng tôi cũng muốn sử dụng nó cho GUI web của riêng mình nếu có thể.
Vấn đề là chúng tôi có thể không muốn tiết lộ tất cả dữ liệu miền cho những người dùng máy khách khác. Phần lớn dữ liệu sẽ chỉ có ý nghĩa trong ứng dụng web của chúng ta. Ngoài ra, chúng tôi có thể không muốn tiết lộ tất cả dữ liệu về một đối tượng trong tất cả các tình huống, đặc biệt là mối quan hệ với các đối tượng khác, v.v. Ví dụ, nếu chúng ta để lộ danh sách một đối tượng cụ thể, chúng ta sẽ không nhất thiết muốn phơi bày toàn bộ hệ thống phân cấp đối tượng; để những đứa trẻ của đối tượng sẽ không bị lộ, nhưng có thể được phát hiện thông qua các liên kết (ghét).
Làm thế nào tôi nên đi giải quyết vấn đề này? Tôi đã suy nghĩ về việc sử dụng Jackson mixins trên các mô hình miền của chúng tôi để kiểm soát dữ liệu nào sẽ được đưa ra theo các kịch bản khác nhau. Hay chúng ta chỉ nên sử dụng DTO theo mọi cách - thậm chí còn đưa ra những hạn chế và tranh cãi của nó?