Bối cảnh:Làm cách nào để xử lý mã cho các dịch vụ web SOAP được phiên bản?
- các dịch vụ web của chúng tôi là công ty nội bộ, nhưng với rất nhiều hệ thống khác nhau sử dụng chúng
- chúng tôi sẽ phấn đấu không chấp/gỡ bỏ phiên bản cũ của api nhiều như chúng tôi có thể
Có rất nhiều thông tin liên quan đến phiên bản dịch vụ web và quyết định của chúng tôi là sử dụng cách tiếp cận sau để phiên bản dịch vụ web của chúng tôi:
- Giữ phiên bản trong URL (Tôi biết một số người chống lại điều này, nhưng chủ yếu liên quan đến các dịch vụ REST)
- Giữ phiên bản trong không gian tên.
Nhưng bây giờ chúng tôi đang quyết định cách thực sự thực hiện việc này và ở đây chúng tôi không tìm thấy nhiều thông tin về các phương pháp hay nhất. Chúng tôi sử dụng (Java):
- Chú thích để xác định các dịch vụ của chúng tôi web (và các api dịch vụ web)
- đậu POJO chú thích với các chú thích XML, để xác định nội dung
- lớp Converter để chuyển đổi từ/đến lớp kinh doanh và dịch vụ web POJO của
- xuân
Vì vậy, để giữ cho các phiên bản cũ trên các dịch vụ web, chúng ta cần phải giữ cho các phiên bản cũ của mã này. Để làm điều này, chúng tôi đã cơ bản nhìn hai cách tiếp cận khác nhau:
1) Đối với mỗi phiên bản mới, tạo một bản sao mới hoàn toàn của các mã có liên quan
Cách tiếp cận này sẽ trông như thế này:
com.company.webservice.v3. -all of the web service classes, POJO’s and converters go here
com.company.webservice.v4. -all of the web service classes, POJO’s and converters go here
Vì vậy, ở đây chúng tôi có mã trùng lặp. Suy nghĩ của chúng tôi trong ngắn hạn:
- Sao chép mã. Sẽ có nhiều lớp với mã giống nhau. Có lẽ khó hiểu trong Eclipse.
- Toàn bộ sự cô lập, dễ dàng để xác định những gì tạo nên một phiên bản cụ
- nguy cơ thiểu ảnh hưởng đến chức năng của các phiên bản trước của các dịch vụ
2) Sử dụng lò xo để chỉ tạo một bản sao của từng loại mà bị ảnh hưởng bởi thay đổi
Cách tiếp cận này có nghĩa là sử dụng Spring IoC và cho phép tất cả các phiên bản của dịch vụ web sử dụng càng nhiều càng tốt, cùng một mã. Chỉ khi chúng ta thực hiện một thay đổi ảnh hưởng đến hành vi/api, chúng ta tạo ra các phiên bản mới của các lớp đó. Ví dụ:
com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java
com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java
com.company.webservice.translators.MyXTranslatorv1.java
com.company.webservice.translators.MyXTranslatorv2.java
- Có thể là khó khăn để thấy rõ những gì tạo nên một phiên bản cụ thể của một dịch vụ web. Có thể dễ dàng hơn do nhầm lẫn ảnh hưởng đến các phiên bản trước của dịch vụ web khi duy trì mã
- Không sao chép mã.Chỉ những thay đổi mới được triển khai làm lớp mới
Cách tiếp cận nào cũng không cảm thấy tối ưu nhưng chúng tôi không tìm thấy nhiều thông tin liên quan đến điều này. Vì vậy, câu hỏi của tôi là: bạn sẽ sử dụng phương pháp nào trong hai phương pháp tiếp cận này? Hay bạn sẽ có một cách tiếp cận hoàn toàn khác?
"bạn sẽ sử dụng phương pháp nào trong hai cách tiếp cận này? Hoặc bạn sẽ thực hiện một cách tiếp cận hoàn toàn khác" = chủ yếu dựa trên ý kiến – Raedwald
Bạn đã có thêm kinh nghiệm về chủ đề này chưa? Tôi đang đối mặt với cùng một loại vấn đề và tôi muốn xác định thực tiễn/quy trình tốt nhất để làm cho dịch vụ web của chúng tôi phát triển. –