মনে করুন যে আপনার কাছে একটি এপিআই বেস দ্বারা সমর্থিত একটি বড় প্রকল্প রয়েছে। প্রকল্পটি এমন একটি সর্বজনীন এপিআইও প্রেরণ করে যা শেষ (ইশ) ব্যবহারকারীরা ব্যবহার করতে পারেন।
কখনও কখনও আপনার প্রকল্পটি সমর্থন করে এমন API বেসে আপনাকে পরিবর্তন করতে হবে। উদাহরণস্বরূপ, আপনাকে এমন একটি বৈশিষ্ট্য যুক্ত করতে হবে যা এপিআই পরিবর্তন প্রয়োজন, একটি নতুন পদ্ধতি প্রয়োজন, বা যে কোনও একটিতে পরিবর্তিত হওয়া দরকার, বা objects অবজেক্টগুলির মধ্যে একটির ফর্ম্যাট, যা এপিআইতে বা পাস করেছে।
ধরে নিই যে আপনি এই জিনিসগুলি আপনার সার্বজনীন এপিআইতেও ব্যবহার করছেন, পাবলিক অবজেক্টগুলি আপনি যে কোনও সময় এটি পরিবর্তন করবেন, এটি অনাকাঙ্ক্ষিত কারণ আপনার ক্লায়েন্টরা তাদের পার্সিং কোডটি কাজ করার জন্য একইরকম এআইপিআই বস্তুর উপর নির্ভর করতে পারে। (কাশি সি ++ ডাব্লুএসডিএল ক্লায়েন্ট ...)
সুতরাং একটি সম্ভাব্য সমাধান হ'ল এপিআই সংস্করণ। তবে যখন আমরা "সংস্করণ" এপিআই বলি, তখন এটির মতো শোনায় আপনার অবশ্যই পরিবর্তিত পদ্ধতির স্বাক্ষরের জন্য ডুপ্লিকেট পদ্ধতি কল সরবরাহ করার পাশাপাশি এপিআই অবজেক্টগুলির সংস্করণ করা উচিত। সুতরাং আমি তখন আমার এপিআই এর প্রতিটি সংস্করণের জন্য প্লেইন পুরাতন clr অবজেক্টটি করব যা আবার অবাঞ্ছিত বলে মনে হচ্ছে। এমনকি যদি আমি এটি করি তবে আমি অবশ্যই প্রতিটি পদার্থ স্ক্র্যাচ থেকে তৈরি করব না কারণ এটি ডুপ্লিকেট কোডের বিশাল পরিমাণে শেষ হবে। পরিবর্তে, সম্ভবত API আমাদের বেস API এর জন্য আমরা যে ব্যক্তিগত অবজেক্টগুলি ব্যবহার করছি তা প্রসারিত করার সম্ভাবনা রয়েছে তবে আমরা আবার একই সমস্যায় পড়ি কারণ যখন যুক্তিযুক্ত বৈশিষ্ট্যগুলি পাবলিক এপিআইতে পাওয়া যাবে তখন যখন সেগুলি থাকার কথাও নয়।
সুতরাং এই পরিস্থিতিতে সাধারণত প্রয়োগ করা হয় যে কিছু বিড়ম্বনা কি? আমি জানি যে গিট ফর উইন্ডোজের মতো অনেকগুলি সরকারী পরিষেবাদি একটি সংস্করণযুক্ত এপিআই বজায় রাখে, তবে আমি এমন একটি আর্কিটেকচারের কল্পনা করতে সমস্যায় পড়ছি যা বিভিন্ন সংস্করণযুক্ত পদ্ধতি এবং ইনপুট / আউটপুট অবজেক্টকে বিস্তৃত পরিমাণে নকল কোড ছাড়াই এটি সমর্থন করে।
আমি সচেতন যে জনসাধারণের এপিআই বিরতি যখন ঘটতে হবে তখন অর্থবিত্ত সংস্করণের মতো প্রক্রিয়াগুলি কিছুটা বোধগম্যতা রাখার চেষ্টা করে । সমস্যাটি আরও বেশি বলে মনে হয় যে অনেকগুলি বা বেশিরভাগ পরিবর্তনের জন্য পাবলিক এপিআই ভাঙার প্রয়োজন যদি বস্তুগুলি আরও আলাদা না করা হয় তবে আমি নকল কোড ছাড়াই এটি করার ভাল উপায় দেখতে পাচ্ছি না।
I don't see a good way to do that without duplicating code
- আপনার নতুন এপিআই সর্বদা আপনার পুরানো এপিআইতে পদ্ধতিগুলি কল করতে পারে বা এর বিপরীতে।