मैं मौजूदा Java API की अधिकांश कार्यक्षमता को उजागर करने के लिए REST API का निर्माण कर रहा हूं। दोनों API मेरे संगठन के भीतर आंतरिक उपयोग के लिए हैं; मुझे बाहरी उपयोग के लिए डिज़ाइन करने की आवश्यकता नहीं है। मेरा दोनों API पर प्रभाव है, लेकिन REST को लागू कर रहा हूं। जावा एपीआई का उपयोग स्थानीय अनुप्रयोगों के लिए किया जाना जारी रहेगा (यह "सेवानिवृत्त नहीं हो रहा है"), लेकिन REST API का उपयोग महत्वपूर्ण तकनीकी विकास के लिए किया जाएगा।
जावा एपीआई कक्षाओं में से कुछ बस डेटा हैं (गुण, गेटर्स, सेटर के साथ सेम)। और इनमें से कम से कम REST एपीआई पर डेटा (जो XML या JSON में marshalled किया जाएगा) से अधिक (किसी न किसी रूप में) संचारित करने का अर्थ है। उदाहरण के लिए, एक वर्ग जो सर्वर मशीन के बारे में जानकारी संग्रहीत करता है। मैं इन डेटा वर्गों के लिए निम्नलिखित विकल्प के साथ सामना कर रहा हूँ: क्या मैं ...
- मूल जावा वर्ग (या एक उपवर्ग) को सीधे REST एपीआई, या में उजागर करें
- REST API के लिए विशेष रूप से एक नया डेटा ट्रांसफर क्लास (DTO पैटर्न) बनाएं?
किसी भी तरह से मेरे पास अन्य डेटा अंतरण कक्षाएं होंगी; सवाल यह है कि क्या मूल की व्याख्या करें या नए बनाए जाएं (जो मूल की प्रतियों के पास हो सकते हैं)। अन्य विकल्प हो सकते हैं, लेकिन मैं मुख्य रूप से उन दो पर ध्यान केंद्रित करूंगा।
# 1 के लिए तर्क:
- DRY (अपने आप को दोहराएं नहीं)
- लागू करने के लिए तेज़
- REST API को अपग्रेड करना आसान है
# 2 के लिए तर्क:
- क्या होगा यदि REST API को Java API से अलग से संस्करणित करने की आवश्यकता हो? (यह कुछ हद तक संभावना है।)
- क्या होगा यदि जावा डेटा वर्गों में महत्वपूर्ण परिवर्तन जैसे कि संपत्तियों को हटाने, व्यवहार को जोड़ने या वर्ग पदानुक्रम में परिवर्तन हो? (यह भी कुछ हद तक संभव है।)
लब्बोलुआब यह है कि यह DRY (# 1) और डिकॉउलिंग (# 2) के बीच एक व्यापार की तरह लगता है।
मैं # 1 के साथ शुरू करने की ओर झुक रहा हूं और अगर बाद में समस्याएँ # 2 के लिए आगे बढ़ रही हैं, तो आप क्या आप की जरूरत नहीं साबित कर सकते हैं नहीं बनाने के चुस्त दिशानिर्देश के बाद। क्या यह एक बुरा विचार है; अगर मुझे लगता है कि मुझे # 2 से शुरू करना चाहिए तो क्या मैं वहां भी समाप्त हो सकता हूं?
क्या मेरी सूची से बड़े तर्क / परिणाम गायब हैं?