Tôi đang xây dựng API REST để hiển thị hầu hết chức năng của API Java hiện có. Cả hai API đều được sử dụng nội bộ trong tổ chức của tôi; Tôi không phải thiết kế để sử dụng bên ngoài. Tôi có ảnh hưởng đến cả hai API nhưng đang triển khai REST. API Java sẽ tiếp tục được sử dụng cho các ứng dụng cục bộ (nó không bị "nghỉ hưu"), nhưng API REST sẽ được sử dụng để phát triển mới đáng kể.
Một số lớp API Java chỉ đơn giản là dữ liệu (các bean có thuộc tính, getters, setters). Và ít nhất một số trong số này có ý nghĩa để truyền (dưới một hình thức nào đó) qua API REST dưới dạng dữ liệu (sẽ được sắp xếp theo XML hoặc JSON). Ví dụ, một lớp lưu trữ thông tin về một máy chủ. Tôi phải đối mặt với sự lựa chọn sau đây cho các lớp dữ liệu này: Tôi có ...
- hiển thị trực tiếp lớp Java gốc (hoặc một lớp con) trong API REST hoặc
- tạo một lớp truyền dữ liệu mới (mẫu DTO) cụ thể cho API REST?
Dù bằng cách nào tôi cũng sẽ có các lớp chuyển dữ liệu REST; câu hỏi là có nên chú thích bản gốc hoặc tạo bản mới (có thể gần bản sao của bản gốc). Có thể có những lựa chọn khác, nhưng tôi sẽ tập trung chủ yếu vào hai thứ đó.
Đối số cho # 1:
- DRY (không lặp lại chính mình)
- Nhanh hơn để thực hiện
- Dễ dàng nâng cấp API REST
Đối số cho # 2:
- Điều gì xảy ra nếu API REST cần được phiên bản riêng với API Java? (Điều này có khả năng.)
- Điều gì xảy ra nếu có các thay đổi đáng kể đối với các lớp dữ liệu Java như loại bỏ các thuộc tính, thêm hành vi hoặc thay đổi vào hệ thống phân cấp lớp? (Điều này cũng có khả năng.)
Điểm mấu chốt là có vẻ như là một sự đánh đổi giữa DRY (# 1) và tách rời (# 2).
Tôi đang nghiêng về việc bắt đầu với số 1 và sau đó nếu có vấn đề phát sinh chuyển sang số 2 sau đó, tuân theo nguyên tắc nhanh nhẹn là không xây dựng những gì bạn không thể chứng minh bạn cần. Đây có phải là một ý tưởng tồi; Tôi có nên bắt đầu với # 2 nếu tôi nghĩ tôi có thể kết thúc ở đó không?
Có những tranh luận / hậu quả chính bị thiếu trong danh sách của tôi không?