ব্যয় এবং বেনিফিটের ক্ষেত্রে প্রায় কোনও কিছুর বিশ্লেষণ করা যায় এবং আমি মনে করি এটি এখানে প্রযোজ্য।
প্রথম বিকল্পের সুস্পষ্ট সুবিধা হ'ল এটি স্বল্পমেয়াদে কাজটি কমিয়ে দেয় এবং ওয়ার্কিং কোডটি পুনরায় লিখে কিছু ভাঙার সম্ভাবনা হ্রাস করে। সুস্পষ্ট ব্যয় হ'ল এটি কোড বেসের সাথে অসঙ্গতি প্রবর্তন করে। আপনি যখন কিছু অপারেশন এক্স করছেন, কোডের কিছু অংশে এটি এক উপায়ে এবং কোডের ভিন্ন অংশে একটি ভিন্ন উপায়ে সম্পন্ন হয়েছে।
দ্বিতীয় পদ্ধতির জন্য, আপনি ইতিমধ্যে সুস্পষ্ট সুবিধাটি উল্লেখ করেছেন: ধারাবাহিকতা। সুস্পষ্ট ব্যয়টি হ'ল আপনাকে কয়েক বছর আগে পরিত্যক্তভাবে থাকতে পারে এমন পদ্ধতিতে আপনার মনকে বাঁকতে হবে এবং কোডটি ধারাবাহিকভাবে অপঠনযোগ্য থেকে যায়।
তৃতীয় পদ্ধতির জন্য, সুস্পষ্ট ব্যয়টি কেবল আরও অনেক বেশি কাজ করতে হয়। একটি কম স্পষ্ট ব্যয় হ'ল আপনি কাজ করে এমন জিনিসগুলি ভেঙে ফেলতে পারেন। এটি বিশেষত সম্ভবত যদি (যেমন প্রায়ই হয়) পুরানো কোডটিতে এটি সঠিকভাবে কাজ করা অব্যাহত রাখার জন্য পর্যাপ্ত পরীক্ষা করে না। সুস্পষ্ট সুবিধাটি হ'ল (ধরে নিলে আপনি এটি সফলভাবে করেন) আপনার সুন্দর, চকচকে নতুন কোড রয়েছে। নতুন ভাষার কন্সট্রাক্টস ব্যবহার করার পাশাপাশি আপনার কাছে কোড বেইসটি রিফ্যাক্টর করার সুযোগ রয়েছে যা প্রায় সবসময় নিজের মধ্যে উন্নতি করে দেবে, এমনকি আপনি যখন তখনও ভাষাটি লেখার সময় অস্তিত্বের মতোই ব্যবহার করেছিলেন - নতুন কনস্ট্রাক্টগুলিতে যুক্ত করুন যা এটি তৈরি করে কাজ সহজ, এবং এটি ভাল একটি বড় জয় হতে পারে।
যদিও অন্য একটি প্রধান বিষয়: এই মুহূর্তে, এটি প্রদর্শিত হচ্ছে দীর্ঘকাল ধরে এই মডিউলটির ন্যূনতম রক্ষণাবেক্ষণ রয়েছে (যদিও পুরো প্রকল্পটি রক্ষণাবেক্ষণ করা হচ্ছে)। এটি নির্দেশ করে যে এটি বেশ ভাল লেখা এবং অপেক্ষাকৃত ত্রুটিমুক্ত - অন্যথায়, সম্ভবত এটি অন্তর্বর্তীকালীন আরও রক্ষণাবেক্ষণ করত।
এটি অন্য প্রশ্নের দিকে পরিচালিত করে: আপনি এখন যে পরিবর্তন করছেন তার উত্স কী? আপনি যদি একটি মডিউলে একটি ছোট বাগ ঠিক করে থাকেন যা সামগ্রিকভাবে এখনও তার প্রয়োজনীয়তাগুলি ভালভাবে পূরণ করে, তবে এটি নির্দেশ করে যে পুরো মডিউলটি পুনরায় সংশোধন করার সময় এবং প্রচেষ্টা ব্যর্থ হওয়ার সম্ভাবনা রয়েছে - এমন সময় দ্বারা যখন কারও সাথে গোলযোগ করা প্রয়োজন by এটি আবার, তারা এখন প্রায় একই অবস্থানে থাকতে পারে এমন কোড বজায় রাখতে পারে যা "আধুনিক" প্রত্যাশাগুলি পূরণ করে না।
তবে এটিও সম্ভব, প্রয়োজনীয়তাগুলি পরিবর্তিত হয়েছে এবং আপনি নতুন প্রয়োজনীয়তা মেটাতে কোডটিতে কাজ করছেন। এই ক্ষেত্রে, সম্ভাবনাগুলি ভাল যে আপনার প্রথম প্রচেষ্টা বাস্তবে বর্তমান প্রয়োজনীয়তাগুলি পূরণ করে না। এগুলি আবার স্থিতিশীল হওয়ার আগে প্রয়োজনীয়তাগুলি কয়েক দফা সংশোধন করার সম্ভাবনা রয়েছে বলেও যথেষ্ট পরিমাণে সম্ভাবনা রয়েছে। এর অর্থ আপনি কাছাকাছি সময়ে (তুলনামূলকভাবে) এই মডিউলে উল্লেখযোগ্য কাজ করার সম্ভাবনা অনেক বেশি, এবং কেবলমাত্র সঠিক সম্পর্কে আপনি জানেন এমন একটি অঞ্চলে নয়, বাকি মডিউলটিতে আরও অনেকগুলি পরিবর্তন আনার সম্ভাবনা রয়েছে এখন। এই ক্ষেত্রে, পুরো মডিউলটি রিফ্যাক্টর করার ফলে অনেক বেশি স্পষ্টতই স্পষ্টত, নিকট-মেয়াদী বেনিফিট যা অতিরিক্ত কাজের ন্যায্যতা প্রমাণ করে।
যদি প্রয়োজনীয়তাগুলি পরিবর্তিত হয়, আপনাকে কী ধরণের পরিবর্তন জড়িত রয়েছে এবং কী সেই পরিবর্তনটি চালাচ্ছে তাও আপনাকে দেখতে হবে। উদাহরণস্বরূপ, ধরে নেওয়া যাক আপনি SHA-1 এর SHA-256 এর ব্যবহার প্রতিস্থাপনের জন্য গিটকে সংশোধন করছেন। এটি প্রয়োজনীয়তার পরিবর্তন, তবে সুযোগটি স্পষ্টভাবে সংজ্ঞায়িত এবং বেশ সংকীর্ণ। একবার আপনি এটি সংরক্ষণ এবং SHA-256 সঠিকভাবে ব্যবহার করার পরে, কোড কোডের বাকী অংশগুলিকে প্রভাবিত করে এমন অন্যান্য পরিবর্তনগুলির মুখোমুখি হওয়ার সম্ভাবনা আপনার নেই।
অন্য দিকে, এমনকি এটি ছোট এবং বিচ্ছিন্ন শুরু হওয়ার পরেও, কোনও ইউজার ইন্টারফেসে পরিবর্তনের বেলুনের প্রবণতা রয়েছে, সুতরাং "এই স্ক্রিনে একটি নতুন চেক বাক্স যুক্ত করুন" হিসাবে শুরু হওয়াটা আরও শেষ হতে পারে: "এই স্থির UI পরিবর্তন করুন ব্যবহারকারী-সংজ্ঞায়িত টেম্পলেটগুলি, কাস্টম ক্ষেত্রগুলি, কাস্টমাইজড রঙের স্কিমগুলি, ইত্যাদি সমর্থন করার জন্য ""
পূর্ববর্তী উদাহরণের জন্য, সম্ভবত পরিবর্তনগুলি কমিয়ে আনতে এবং ধারাবাহিকতার দিক দিয়ে ভুল করা সর্বাধিক বোধ করা যায়। পরবর্তীকালের জন্য, সম্পূর্ণ রিফ্যাক্টরিংটি পরিশোধের সম্ভাবনা অনেক বেশি।