উত্তর:
বৈশিষ্ট্যযুক্ত পতাকাগুলি একটি ইঞ্জিনিয়ারিং ডিভাইস যা দীর্ঘকালীন শাখা এবং পণ্য বিকাশে দ্বন্দ্ব এড়াতে ব্যবহার করা যেতে পারে। এটি কীভাবে এটি কোনও নতুন সংস্করণ পরিচালনা করার সময় কোনও নির্দিষ্ট পণ্য বৈশিষ্ট্যে বিকাশকারীদের সহযোগিতা করতে কোনও অবজেক্ট-ভিত্তিক ভাষার প্রসঙ্গে ব্যবহার করা যেতে পারে। এই সমাধানটি অবজেক্ট-ভিত্তিক প্রসঙ্গেও ব্যবহার করা যেতে পারে, তবে "ইন্টারফেস" ধারণাটি বিদ্যমান provided ( সিএফ। ওসিএএমএল মডিউল সিস্টেম))
উদাহরণের উদ্দেশ্যে, আমরা একটি সরঞ্জাম ধরে নিই যা একটি ডাটাবেসে সঞ্চিত ডেটা সম্পর্কে প্রতিবেদন উপস্থাপন করে। কোড অনুরোধ সম্পাদন করতে ব্যবহৃত একটি ডাটাবেস ক্লায়েন্ট শ্রেণি প্রয়োগ করে। ডেটাসেটটি বাড়ার সাথে সাথে এটি স্পষ্ট হয়ে যায় যে কিছু বিকল্প ডেটা বিন্যাস অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করবে। অতএব এলিস এর একটি নতুন সংস্করণ বিকশিত হবে DatabaseClient , উন্নত বিন্যাস সঙ্গে কাঠামো থেকে তথ্য পুনরুদ্ধার করতে পারবেন যখন বব ঐতিহাসিক বজায় রাখা হবে DatabaseClient ।
নিম্নলিখিত পদক্ষেপগুলির সাথে, অ্যালিস এবং বব তাদের বিবাদগুলি হ্রাস করার সময় স্বল্প-স্থায়ী শাখায় সহযোগিতা করতে পারে।
এলিস নামান্তর DatabaseClient করার DatabaseClient_v1 এবং একটি প্রতিনিধি বর্গ নামক তৈরি DatabaseClient একটি বস্তু ব্যবহার করে DatabaseClient_v1 এবং কার্যকরী একটি ইন্টারফেস নামক DatabaseClientInterface। (যদি সম্ভব হয় তবে এই ডাটাবেসক্লিয়েন্টইন্টারফেসটি একটি কোড আর্টফ্যাক্ট হওয়া উচিত তবে হাঁস-টাইপ করা ভাষাগুলি সর্বদা এটি সমর্থন করে না))
বব পর্যালোচনা পরিবর্তন 1 এলিস দ্বারা তৈরি এবং সচেতন যে তার রক্ষণাবেক্ষণ কাজ ঘটতে উচিত DatabaseClient_v1 ।
এলিস অ্যাপ্লিকেশন আচরণকে নিয়ন্ত্রণ একটি নতুন কনফিগারেশন পতাকা প্রবর্তন DatabaseClient প্রতিনিধি এবং কার্যকরী একটি DatabaseClient_v2 স্থানধারক, একটি বর্গ বাস্তবায়ন DatabaseClientInterface যার পদ্ধতি সব একটি "বাস্তবায়িত হয়নি" ব্যতিক্রম নিক্ষেপ করা।
এর পর এলিস এবং বব, স্পষ্ট সিঙ্ক্রোনাইজেশন ছাড়া সহযোগী হতে পারেন কারণ তাদের নিজ নিজ পুনরাবৃত্তিও লেখা কোড সাপেক্ষে DatabaseClientInterface । এটি তাদের সহবর্তী কাজগুলির ফলে সংঘাতের ঝুঁকি হ্রাস করে।
অ্যালিসের থেকে প্রাপ্ত সামগ্রীগুলি খুব সংক্ষিপ্ত হতে পারে যেমন একটি পরীক্ষা বাস্তবায়ন করা, কোনও পদ্ধতি বাস্তবায়ন করা বা আংশিকভাবে এটি করা, কারণ উত্পাদনে কোডটি ব্যবহারের জন্য নির্বাচিত হয় না এবং সম্পূর্ণরূপে কার্যক্ষম হওয়ার প্রয়োজন হয় না। স্বয়ংক্রিয় testsuite তাই কনফিগার করা উচিত যে DatabaseClientInterface সবসময় ব্যবহার DatabaseClient_v1 এলিস সহজেই টগল করতে পারেন যখন DatabaseClient_v2 স্থানীয়ভাবে testsuite চলমান - অথবা একটি কাস্টম সি আই সেটআপ। একবার সবকিছু প্রস্তুত হয়ে গেলে, একটি একক প্রতিশ্রুতিবদ্ধভাবে ডেটাবেস ক্লাইেন্ট প্রতিনিধি পরিচালনা কনফিগারেশন মান আপডেট করে পরিবর্তন সম্পাদন করতে পারে ।
মূলত দুটি জিনিস আপনার প্রয়োজন এমন একটি বৈশিষ্ট্যযুক্ত পতাকা অ্যাপ্লিকেশনটিতে স্থানান্তর করতে পদক্ষেপগুলি বেশ "সহজ":
বৈশিষ্ট্যযুক্ত পতাকাটির মূল হ'ল এগুলি চালু / বন্ধ করা, তবে দ্রুত আপনি র্যাম্প-আপ পদ্ধতিতে একটি নতুন বৈশিষ্ট্য প্রকাশ করতে চান, উদাহরণস্বরূপ: অ্যাপ্লিকেশনটির হোস্টিংয়ের 5 টি সার্ভারের বৈশিষ্ট্যটি "চালু" রাখতে হবে, আপনি তখন অন্য সার্ভারে বৈশিষ্ট্যটি চালু করেন, যতক্ষণ না সমস্ত সার্ভারে এটি "চালু" থাকে।
এর অর্থ হল আপনার বৈশিষ্ট্যটি অ্যাপটি ছাড়াই সামঞ্জস্যপূর্ণ হওয়া সম্পর্কে সতর্ক থাকতে হবে (উদাহরণস্বরূপ ডিবিতে অতিরিক্ত কলাম)।
চাকাটি পুনরায় উদ্ভাবন এড়ানোর জন্য বিভিন্ন ভাষায় ফ্রেমওয়ার্ক বিদ্যমান, এটিটি কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য এখন এটসের এখন থেকে রক্ষণাবেক্ষণ না করা একটি আকর্ষণীয় রেডমি রয়েছে ।
এম্বেড করা সফ্টওয়্যার ওয়ার্ল্ড প্রায়শই বিল্ড-টাইম পতাকা ব্যবহার করে, অ্যাপ কোডে নিজেই ( #define
/ #ifdef
বিবৃতি, উদাহরণস্বরূপ) এবং / অথবা বিল্ড সরঞ্জাম কনফিগারেশন ফাইলগুলিতে ( makefile
উদাহরণস্বরূপ)।
বিল্ড ফ্ল্যাগগুলি কেবল একই বৈশিষ্ট্যগুলির জন্যই নয়, সমস্ত ধরণের কোড রিফ্যাক্টরিং, মাইগ্রেশন, ডিবাগ সমর্থন ইত্যাদি) ব্যবহার করা যেতে পারে। তারা ইন্টিগ্রেশন শাখায় আঞ্চলিক বা যাচাইকৃত পরিবর্তনগুলি সংঘবদ্ধ না করে বা ব্রাঞ্চে ইতিমধ্যে কাজ করা বৈশিষ্ট্য / প্রকল্পগুলিতে প্রতিক্রিয়া সৃষ্টি না করে প্রতিশ্রুতি দেয়। অবিচ্ছিন্ন ইন্টিগ্রেশন পদ্ধতিতে বৃহত / ঝুঁকিপূর্ণ / ধীর অগ্রগতি পরিবর্তনের পাশাপাশি (যা অন্যথায় দীর্ঘমেয়াদী শাখার প্রয়োজন হবে) পাশাপাশি পয়েন্ট ফিক্সগুলি পরিচালনা করার জন্য দুর্দান্ত।
তবে রিগ্রেশনগুলির জন্য ইতিমধ্যে বিদ্যমান শাখা কোড যাচাই করা ছাড়াও নতুন কোডটির অগ্রগতি / স্থায়িত্ব যাচাইকরণ করাও সম্ভব। এর জন্য বিল্ড-টাইম পতাকাগুলি টগল করা দরকার।
পতাকাগুলি টগল করার একটি উপায় হ'ল একই শাখার সিআই সিস্টেমের পৃথক যাচাইকরণ পাইপলাইনে (যদি এর মধ্যে এই জাতীয় কার্যকারিতার জন্য সমর্থন থাকে), প্যাচফাইলে পতাকা টগল করছে - এর আগে একটি পৃথক কর্মক্ষেত্রে প্রয়োগ করতে হবে বিল্ড। এই কর্মক্ষেত্রে একটি আলাদা শিল্পকর্ম তৈরি করা হবে এবং তারপরে যাচাই করা হবে।
বিকল্পভাবে একটি দীর্ঘায়িত বৈশিষ্ট্য শাখাটি মূল ইন্টিগ্রেশন শাখা থেকে টানতে পারে তবে এই বৈশিষ্ট্য শাখার একমাত্র পরিবর্তনটি হবে টগলড পতাকা। এই ক্ষুদ্র পরিবর্তনের কারণে বৈশিষ্ট্য শাখাটি স্বয়ংক্রিয়ভাবে অত্যন্ত দ্রুত সিঙ্ক করা যায় - কার্যত প্রধান সংহতকরণ শাখার খুব কাছাকাছি ছায়া দেওয়া। এই শাখায় একটি পৃথক সিআই কার্যকর করার জন্য আর প্রাথমিক প্যাচফিলের প্রয়োজন হবে না। এমনকি সময়সীমা বর্ধিত সময়ের জন্য এই জাতীয় বৈশিষ্ট্য শাখার চারপাশে বহন করা নগণ্য হবে।
মূল ইন্টিগ্রেশন শাখায় নতুন বিল্ড আর্টিক্টস তৈরি করাও সম্ভব হতে পারে যা সত্যই বিদ্যমান বিল্ড আর্টফিটগুলির কেবল ক্লোন হবে তবে পতাকাগুলি টগলড সহ। এই পদ্ধতিতে প্রাথমিক প্যাচফায়াল বা বৈশিষ্ট্য শাখা দুটিই মূল কোডটিতে সরাসরি নতুন কোড যাচাই করার জন্য প্রয়োজনীয় হবে না।