TL; DR - Có thể chia sẻ thư viện POJO giữa các dịch vụ không?
Nói chung, chúng tôi muốn duy trì việc chia sẻ giữa các dịch vụ với giới hạn nghiêm ngặt nếu không có thể. Đã có một số tranh luận về việc dịch vụ chia sẻ dữ liệu có nên cung cấp thư viện khách cho khách hàng sử dụng hay không. Client-lib thường là tùy chọn cho một khách hàng của dịch vụ sử dụng và có thể sử dụng API theo bất kỳ cách nào họ muốn, có nên sử dụng lib-client hay sử dụng ngôn ngữ thay thế và sử dụng các khía cạnh chung của thư viện hay không.
Trong trường hợp của tôi - tôi đang xem xét một dịch vụ tạo ra một đối tượng dữ liệu. Giả sử đối tượng này là một PET. Nó KHÔNG phải là thực thể cơ sở dữ liệu, nhưng hoàn toàn là một POJO đại diện cho dữ liệu cơ bản. POJO này là những gì API đã xác định. Giả sử: Thú cưng - Tuổi, Trọng lượng, Tên, Chủ sở hữu, Địa chỉ, Loài, v.v.
Dịch vụ 1 - PetKeeper: Nó sẽ tạo ra thú cưng vì bất kỳ lý do gì và giữ lại tất cả dữ liệu và phải tham chiếu dịch vụ này để lấy thú cưng hoặc sửa đổi Pet, cho biết thay đổi tên hoặc thay đổi địa chỉ phải được thực hiện thông qua một API gọi đến dịch vụ này.
Dịch vụ 2 - PetAccessor: Dịch vụ này tập hợp thú cưng và kiểm tra xác thực
Dịch vụ 3,4 - Các cuộc gọi dịch vụ trung gian khác
Dịch vụ 5 - Inteface người dùng
Đây là rất tùy tiện nhưng điểm là đơn giản. Giao diện người dùng hoặc một số dịch vụ hướng tới người dùng muốn trình bày theo cách nào đó đối tượng "PET" này. Nó phải gọi qua API một dịch vụ, gọi một dịch vụ, gọi một dịch vụ, vv cho đến khi nó đến dịch vụ thu thập thông tin cần thiết và bắt đầu chuyển tiếp trở lại. Cuối cùng, dịch vụ UI có đối tượng PET để hiển thị.
Điều này khá phổ biến - nhưng với tâm lý tuyệt đối của chúng tôi, chúng tôi đã nhân đôi đối tượng PET trong mọi dịch vụ. Nguyên tắc DRY (không lặp lại chính mình) chỉ áp dụng cho mã bên trong một dịch vụ và không áp dụng trên các dịch vụ nhưng vấn đề vẫn còn đó. Điều gì xảy ra nếu chúng ta thêm một trường ... chúng ta phải sửa đổi 5 dịch vụ của POJO trong mỗi dịch vụ.
--OR-- Chúng tôi có thể cung cấp Thư viện đối tượng thú cưng chứa một số pojo từ API và mỗi dịch vụ có thể nhập / phụ thuộc vào thư viện. Không có sự phụ thuộc vào (các) dịch vụ, mà chỉ là thư viện chung. Tôi thích ý tưởng này để mỗi dịch vụ có cùng loại đối tượng và cập nhật dễ dàng hơn. Nhưng tôi lo ngại về các đối tượng của Chúa.
Các pro / con - thiết kế tốt nhất là gì? Bạn đã làm gì để truyền dữ liệu giữa các dịch vụ để giảm thiểu việc lặp lại các lớp POJO tương tự trong khi vẫn không kết nối?