C++:
রিফ্যাক্টরিং

কিভাবে:

কল্পনা করুন আপনার কাছে এমন একটি ফাংশন আছে যা একটু বেশি কাজ করে, যেমন এই ভারী মেথডটি যা একটি অবজেক্ট ইনিশিয়ালাইজ করে এবং লগিংও সম্পাদন করে:

#include <iostream>

class Widget {
public:
    void init(bool verbose) {
        // ইনিশিয়ালাইজেশন লজিক
        // ...

        // ভার্বোজ লগিং
        if (verbose) {
            std::cout << "Widget initialized!" << std::endl;
        }
    }
};

// ব্যবহার:
Widget w;
w.init(true);

আউটপুট:

Widget initialized!

এটি আরও পরিষ্কার, আরও ফোকাসড মেথডে রিফ্যাক্টরিং করলে এরকম দেখাবে:

#include <iostream>

class Widget {
public:
    void init() {
        // শুধুমাত্র ইনিশিয়ালাইজেশন লজিক
        // ...
    }

    void logInitialization() const {
        std::cout << "Widget initialized!" << std::endl;
    }
};

// ব্যবহার:
Widget w;
w.init();
w.logInitialization();

এই পরিবর্তন প্রোগ্রামটি কি করে তা পরিবর্তন না করেও Widget ক্লাসকে আরও মডিউলার এবং এর ব্যবহারকে আরও স্পষ্ট করে তুলেছে।

গভীর ডুব

যেমন আমরা জানি আজকের রিফ্যাক্টরিং ধারণাটির শেকড় রয়েছে ১৯৮০-এর দশকের স্মলটক প্রোগ্রামিং কমিউনিটিতে এবং এটি মার্টিন ফাউলারের “রিফ্যাক্টরিং: ইম্প্রুভিং দ্য ডিজাইন অফ এক্সিস্টিং কোড” বই দ্বারা প্রচণ্ডভাবে জনপ্রিয় হয়েছিল যা ১৯৯৯ সালে প্রকাশিত হয়েছিল। আজকে, রিফ্যাক্টরিং আধুনিক সফটওয়্যার ডেভেলপমেন্টের একটি মূল অংশ, যা এজাইল এবং TDD (টেস্ট-ড্রাইভেন ডেভেলপমেন্ট) এর মতো বিভিন্ন ডেভেলপমেন্ট পদ্ধতিতে একীভূত করা হয়েছে।

রিফ্যাক্টরিংয়ের বিকল্প সম্পর্কে আলোচনা করলে, আমরা পুনর্লিখন বা পুনঃডিজাইনের অঞ্চলে চলে যাই। রিফ্যাক্টরিং কৌশলগত এবং ক্রমান্বয়ী, অন্যদিকে একটি পুনর্লিখন বিদ্যমান কোডকে ফেলে দিয়ে নতুন সমাধানের পক্ষে যেতে পারে। পুনঃডিজাইন হলো, এদিকে, আরও গুরুতর পরিবর্তনসমূহ অন্তর্ভুক্ত করতে পারে যা কার্যকারিতা পরিবর্তন করতে পারে, যা শুদ্ধ রিফ্যাক্টরিংয়ের জন্য একটি অ-লক্ষ্য।

রিফ্যাক্টরিং সম্পর্কে বাস্তবায়নের বিস্তারিত তথ্য বেশ সূক্ষ্ম হতে পারে। রিফ্যাক্টরিং উদ্বুদ্ধ করতে পারে এমন অনেক ‘কোড স্মেল’ আছে, যেমন দীর্ঘ মেথড, বড় ক্লাস, অথবা ডুপ্লিকেট কোড। “Clang-Tidy” এর মতো স্বয়ংক্রিয় টুলস আছে যা সি++, এ সমস্যাগুলি চিহ্নিত করতে এবং কিছু সংশোধন প্রয়োগ করতে সাহায্য করতে পারে।

তদুপরি, রিফ্যাক্টরিং একটি দৃঢ় টেস্ট স্যুট প্রয়োজন করে যাতে করে কার্যকারিতা অপরিবর্তিত থাকে। টেস্ট ছাড়া, আপনি মূলত অন্ধকারে উড়ছেন এবং রিগ্রেশনের ঝুঁকি নিচ্ছেন।

আরও দেখুন

রিফ্যাক্টরিং সম্পর্কে গভীর ধারণা পেতে এবং আরও উদাহরণ দেখতে আপনার যেতে পারেন:

  • মার্টিন ফাউলারের ক্লাসিক টেক্সট “রিফ্যাক্টরিং: ইম্প্রুভিং দ্য ডিজাইন অফ এক্সিস্টিং কোড” মৌলিক ধারণা ও কৌশলগুলি জন্য।
  • সি++ এ স্বয়ংক্রিয় রিফ্যাক্টরিং সাপোর্টের জন্য Clang-Tidy ডকুমেন্টেশন https://clang.llvm.org/extra/clang-tidy/ দেখুন।
  • মাইকেল ফেদার্সের “ওয়ার্কিং এফেক্টিভলি উইথ লেগ্যাসি কোড” যা কম নিখুঁত বিদ্যমান কোডবেসগুলিতে নিরাপদে রিফ্যাক্টরিং করার কৌশল প্রদান করে।