একাধিক ফাংশন সহ একটি বৃহত প্রকল্পে একটি উত্স ফাইল রয়েছে যা অত্যন্ত কার্য সম্পাদন-সংবেদনশীল (প্রতি সেকেন্ডে কয়েক মিলিয়ন বার বলা হয়)। প্রকৃতপক্ষে, পূর্ববর্তী রক্ষণাবেক্ষণকারী একক ফাংশনে শর্তসাপেক্ষে পরীক্ষা করতে ব্যয় করা সময়টি বাঁচানোর জন্য প্রতিটি ফাংশনটির 12 টি অনুলিপি কিছুটা পৃথক করে লেখার সিদ্ধান্ত নিয়েছিলেন।
দুর্ভাগ্যক্রমে, এর অর্থ কোডটি বজায় রাখা একটি পিআইটিএ। আমি সমস্ত সদৃশ কোড মুছে ফেলতে এবং কেবল একটি টেম্পলেট লিখতে চাই। তবে জাভা ভাষা টেমপ্লেট সমর্থন করে না এবং আমি নিশ্চিত নই যে জেনেরিকগুলি এর জন্য উপযুক্ত।
আমার বর্তমান পরিকল্পনাটি পরিবর্তে একটি ফাইল লিখতে যা ফাংশনটির 12 অনুলিপি তৈরি করে (একটি ব্যবহারের জন্য কেবল টেমপ্লেট প্রসারণকারী, কার্যত)। আমি অবশ্যই প্রোগ্রামিয়ালি ফাইলটি কেন উত্পন্ন করতে হবে তার জন্য প্রচুর ব্যাখ্যা প্রদান করব।
আমার উদ্বেগ এই যে এটি ভবিষ্যতে রক্ষণাবেক্ষণকারীদের বিভ্রান্তির দিকে পরিচালিত করবে এবং সম্ভবত তারা যদি প্রোগ্রামটি-উত্পন্ন ফাইলের পরিবর্তে ফাইলটি সংশোধন করার পরে ফাইলটিকে পুনরায় তৈরি করতে ভুলে যায় বা বাজে সমস্যাগুলি প্রবর্তন করে তবে (আরও খারাপ) introduce দুর্ভাগ্যক্রমে, সি ++ তে পুরো জিনিসটি পুনরায় লেখার স্বল্পতা, আমি এটিকে ঠিক করার কোনও উপায় দেখতে পাচ্ছি না।
এই পদ্ধতির সুবিধাগুলি কি অসুবিধাগুলি ছাড়িয়ে যায়? পরিবর্তে আমার উচিত:
- পারফরম্যান্স হিট করুন এবং একটি একক, রক্ষণাবেক্ষণযোগ্য ফাংশন ব্যবহার করুন।
- ফাংশনটি কেন 12 বার নকল করা উচিত এবং এর জন্য রক্ষণাবেক্ষণের ভার গ্রহণ করুন for
- জেনেরিকগুলি টেম্পলেট হিসাবে ব্যবহার করার চেষ্টা করুন (তারা সম্ভবত সেভাবে কাজ করে না)।
- একক ক্রিয়াকলাপের উপর পারফরম্যান্স-নির্ভর কোড তৈরি করার জন্য পুরানো রক্ষণাবেক্ষণকারীকে চিৎকার করুন।
- পারফরম্যান্স এবং রক্ষণাবেক্ষণের জন্য অন্যান্য পদ্ধতি?
পিএস প্রকল্পের দুর্বল ডিজাইনের কারণে, ফাংশনটির প্রোফাইলিং করা বরং কৃপণ ... তবে প্রাক্তন রক্ষণাবেক্ষণকারী আমাকে বোঝাতে পেরেছেন যে পারফরম্যান্স হিট অগ্রহণযোগ্য। আমি এটি ধরে নিয়েছি তার অর্থ 5% এরও বেশি, যদিও এটি আমার পক্ষ থেকে সম্পূর্ণ অনুমান।
সম্ভবত আমার কিছুটা ব্যাখ্যা করা উচিত। 12 অনুলিপিগুলি খুব অনুরূপ কাজ করে তবে কিছুক্ষণের মধ্যে পার্থক্য রয়েছে। পার্থক্যটি পুরো ফাংশন জুড়ে বিভিন্ন জায়গায় রয়েছে, তাই দুর্ভাগ্যক্রমে অনেকগুলি, শর্তাধীন বিবৃতি রয়েছে। কার্যকরভাবে অপারেশনের 6 "মোড" এবং অপারেশনের 2 "দৃষ্টান্ত" রয়েছে (নিজের দ্বারা বানানো শব্দ)। ফাংশনটি ব্যবহার করতে, একটি অপারেশনের "মোড" এবং "দৃষ্টান্ত" নির্দিষ্ট করে। এটি কখনই গতিশীল নয়; কোডের প্রতিটি টুকরা ঠিক এক মোড এবং দৃষ্টান্ত ব্যবহার করে। সমস্ত 12 মোড-দৃষ্টান্ত জোড়া অ্যাপ্লিকেশনটির কোথাও ব্যবহৃত হয়। ফাংশনগুলির যথাযথভাবে func1 এর নামকরণ করা হয়েছে func12, এমনকি দ্বিতীয় সংখ্যাটি উপস্থাপন করে এমন বিজোড় সংখ্যা এবং প্রথম দৃষ্টান্তটি উপস্থাপন করে বিজোড় সংখ্যা।
আমি সচেতন যে এটি রক্ষণাবেক্ষণের লক্ষ্য যদি হয় তবে এটি এখনও সবচেয়ে খারাপ ডিজাইন। তবে এটি "দ্রুত যথেষ্ট" বলে মনে হচ্ছে, এবং এই কোডটির কিছু সময়ের জন্য কোনও পরিবর্তনের প্রয়োজন নেই ... এটিও লক্ষণীয় যে মূল ফাংশনটি মোছা হয়নি (যদিও এটি আমি যতটা বলতে পারি ডেড কোড) সুতরাং রিফ্যাক্টরিং সহজ হবে।
Makefile
" (অথবা আপনি যে কোনও সিস্টেম ব্যবহার করেন) থেকে বিল্ডিং করার সময় ফাইলটি তৈরি করুন এবং সংকলন শেষ হওয়ার পরে এটিকে সরান । এভাবে তারা কেবল না ভুল সোর্স ফাইল পরিবর্তন করতে একটি সুযোগ আছে।