CodeGym/Java Blog/এলোমেলো/কিভাবে রিফ্যাক্টরিং জাভাতে কাজ করে
John Squirrels
লেভেল 41
San Francisco

কিভাবে রিফ্যাক্টরিং জাভাতে কাজ করে

এলোমেলো দলে প্রকাশিত
সদস্যগণ
আপনি কীভাবে প্রোগ্রামিং করতে শিখবেন, আপনি কোড লিখতে অনেক সময় ব্যয় করেন। বেশিরভাগ প্রারম্ভিক বিকাশকারীরা বিশ্বাস করেন যে তারা ভবিষ্যতে এটিই করবে। এটি আংশিকভাবে সত্য, তবে একজন প্রোগ্রামারের কাজের মধ্যে কোড বজায় রাখা এবং রিফ্যাক্টরিং অন্তর্ভুক্ত থাকে। আজ আমরা রিফ্যাক্টরিং সম্পর্কে কথা বলতে যাচ্ছি। জাভাতে রিফ্যাক্টরিং কিভাবে কাজ করে - 1

কোডজিমে রিফ্যাক্টরিং

কোডজিম কোর্সে রিফ্যাক্টরিং দুবার কভার করা হয়েছে: বড় কাজটি অনুশীলনের মাধ্যমে বাস্তব রিফ্যাক্টরিংয়ের সাথে পরিচিত হওয়ার সুযোগ দেয় এবং IDEA-তে রিফ্যাক্টরিংয়ের পাঠ আপনাকে স্বয়ংক্রিয় সরঞ্জামগুলিতে ডুব দিতে সাহায্য করে যা আপনার জীবনকে অবিশ্বাস্যভাবে সহজ করে তুলবে।

রিফ্যাক্টরিং কি?

এটি তার কার্যকারিতা পরিবর্তন না করেই কোডের গঠন পরিবর্তন করছে। উদাহরণস্বরূপ, ধরুন আমাদের একটি পদ্ধতি আছে যা 2টি সংখ্যার তুলনা করে এবং প্রথমটি বড় হলে এবং অন্যথায় মিথ্যা হলে সত্য প্রদান করে :
public boolean max(int a, int b) {
    if(a > b) {
        return true;
    } else if (a == b) {
        return false;
    } else {
        return false;
    }
}
এটি একটি বরং অবাঞ্ছিত কোড. এমনকি নতুনরাও খুব কমই এরকম কিছু লিখবে, তবে একটি সুযোগ আছে। if-elseআপনি যদি 6-লাইন পদ্ধতিটি আরও সংক্ষিপ্তভাবে লিখতে পারেন তবে কেন একটি ব্লক ব্যবহার করবেন ?
public boolean max(int a, int b) {
     return a > b;
}
এখন আমাদের কাছে একটি সহজ এবং মার্জিত পদ্ধতি রয়েছে যা উপরের উদাহরণের মতো একই অপারেশন করে। এইভাবে রিফ্যাক্টরিং কাজ করে: আপনি কোডের সারাংশকে প্রভাবিত না করেই এর গঠন পরিবর্তন করেন। অনেক রিফ্যাক্টরিং পদ্ধতি এবং কৌশল রয়েছে যা আমরা আরও ঘনিষ্ঠভাবে দেখব।

কেন আপনি রিফ্যাক্টরিং প্রয়োজন?

বেশ কিছু কারণ আছে। উদাহরণস্বরূপ, কোডে সরলতা এবং সংক্ষিপ্ততা অর্জন করা। এই তত্ত্বের প্রবক্তারা বিশ্বাস করেন যে কোডটি যতটা সম্ভব সংক্ষিপ্ত হওয়া উচিত, এমনকি যদি এটি বোঝার জন্য কয়েক ডজন লাইনের মন্তব্যের প্রয়োজন হয়। অন্যান্য বিকাশকারীরা নিশ্চিত যে কোডটি ন্যূনতম সংখ্যক মন্তব্যের সাথে বোধগম্য করার জন্য রিফ্যাক্টর করা উচিত। প্রতিটি দল তার নিজস্ব অবস্থান গ্রহণ করে, কিন্তু মনে রাখবেন যে রিফ্যাক্টরিং এর অর্থ হ্রাস নয়এর মূল উদ্দেশ্য হল কোডের গঠন উন্নত করা। এই সামগ্রিক উদ্দেশ্যে বেশ কয়েকটি কাজ অন্তর্ভুক্ত করা যেতে পারে:
  1. রিফ্যাক্টরিং অন্যান্য বিকাশকারীদের দ্বারা লিখিত কোড বোঝার উন্নতি করে।
  2. এটি বাগগুলি খুঁজে পেতে এবং ঠিক করতে সহায়তা করে৷
  3. এটি সফ্টওয়্যার বিকাশের গতিকে ত্বরান্বিত করতে পারে।
  4. সামগ্রিকভাবে, এটি সফ্টওয়্যার ডিজাইন উন্নত করে।
যদি রিফ্যাক্টরিং দীর্ঘ সময়ের জন্য সঞ্চালিত না হয়, তবে উন্নয়নে অসুবিধার সম্মুখীন হতে পারে, যার মধ্যে কাজ সম্পূর্ণ বন্ধ রয়েছে।

"কোড গন্ধ"

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

অযৌক্তিকভাবে বড় ক্লাস এবং পদ্ধতি

ক্লাস এবং পদ্ধতিগুলি কঠিন হতে পারে, তাদের বিশাল আকারের কারণে কার্যকরভাবে সঠিকভাবে কাজ করা অসম্ভব।

বড় ক্লাস

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

দীর্ঘ পদ্ধতি

এই "গন্ধ" উত্থাপিত হয় যখন একজন বিকাশকারী একটি পদ্ধতিতে নতুন কার্যকারিতা যোগ করে: "কেন আমি একটি পৃথক পদ্ধতিতে একটি প্যারামিটার চেক করব যদি আমি এখানে কোড লিখতে পারি?", "সর্বোচ্চ খুঁজে পেতে আমার একটি পৃথক অনুসন্ধান পদ্ধতির প্রয়োজন কেন? একটি অ্যারেতে উপাদান? আসুন এটি এখানে রাখি। কোডটি এভাবে পরিষ্কার হবে", এবং এই ধরনের অন্যান্য ভুল ধারণা।

একটি দীর্ঘ পদ্ধতি রিফ্যাক্টর করার জন্য দুটি নিয়ম আছে:

  1. আপনি যদি একটি পদ্ধতি লেখার সময় একটি মন্তব্য যোগ করতে চান, আপনি একটি পৃথক পদ্ধতিতে কার্যকারিতা রাখা উচিত.
  2. যদি একটি পদ্ধতিতে 10-15 লাইনের বেশি কোড লাগে, তাহলে আপনার উচিত কাজগুলি এবং সাবটাস্কগুলি চিহ্নিত করা যা এটি সম্পাদন করে এবং সাবটাস্কগুলিকে একটি পৃথক পদ্ধতিতে রাখার চেষ্টা করুন৷

একটি দীর্ঘ পদ্ধতি নির্মূল করার কয়েকটি উপায় আছে:

  • পদ্ধতির কার্যকারিতার অংশ একটি পৃথক পদ্ধতিতে সরান
  • যদি স্থানীয় ভেরিয়েবল আপনাকে কার্যকারিতার অংশ সরানো থেকে বাধা দেয়, আপনি সম্পূর্ণ বস্তুটিকে অন্য পদ্ধতিতে সরাতে পারেন।

অনেক আদিম ডেটা টাইপ ব্যবহার করা

এই সমস্যাটি সাধারণত ঘটে যখন একটি ক্লাসের ক্ষেত্রের সংখ্যা সময়ের সাথে বৃদ্ধি পায়। উদাহরণস্বরূপ, যদি আপনি ছোট বস্তুর পরিবর্তে আদিম প্রকার বা ধ্রুবকগুলিতে সবকিছু (মুদ্রা, তারিখ, ফোন নম্বর ইত্যাদি) সংরক্ষণ করেন। এই ক্ষেত্রে, একটি ভাল অনুশীলন হবে ক্ষেত্রগুলির একটি যৌক্তিক গ্রুপিংকে একটি পৃথক শ্রেণীতে (এক্সট্রাক্ট ক্লাস) সরানো। আপনি ডেটা প্রক্রিয়া করার জন্য ক্লাসে পদ্ধতি যোগ করতে পারেন।

অনেক প্যারামিটার

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

ডেটা গ্রুপ

যৌক্তিকভাবে সম্পর্কিত ডেটার গ্রুপগুলি প্রায়ই কোডে উপস্থিত হয়। উদাহরণস্বরূপ, ডাটাবেস সংযোগ পরামিতি (URL, ব্যবহারকারীর নাম, পাসওয়ার্ড, স্কিমা নাম, ইত্যাদি)। যদি ক্ষেত্রগুলির তালিকা থেকে একটি একক ক্ষেত্র সরানো না যায়, তবে এই ক্ষেত্রগুলিকে একটি পৃথক শ্রেণিতে (এক্সট্রাক্ট ক্লাস) সরানো উচিত।

OOP নীতি লঙ্ঘন করে এমন সমাধান

এই "গন্ধ" ঘটে যখন একজন বিকাশকারী সঠিক OOP ডিজাইন লঙ্ঘন করে। এটি ঘটে যখন সে OOP ক্ষমতাগুলি সম্পূর্ণরূপে বুঝতে পারে না এবং সেগুলি সম্পূর্ণ বা সঠিকভাবে ব্যবহার করতে ব্যর্থ হয়।

উত্তরাধিকার ব্যবহারে ব্যর্থতা

যদি একটি সাবক্লাস প্যারেন্ট ক্লাসের ফাংশনগুলির শুধুমাত্র একটি ছোট উপসেট ব্যবহার করে, তাহলে এটি ভুল অনুক্রমের গন্ধ পায়। যখন এটি ঘটে, সাধারণত অতিরিক্ত পদ্ধতিগুলি কেবল ওভাররাইড করা হয় না বা তারা ব্যতিক্রমগুলি ফেলে দেয়। একটি শ্রেণির উত্তরাধিকারসূত্রে অন্যটি বোঝায় যে শিশু শ্রেণিটি অভিভাবক শ্রেণীর প্রায় সমস্ত কার্যকারিতা ব্যবহার করে। একটি সঠিক অনুক্রমের উদাহরণ: জাভাতে রিফ্যাক্টরিং কীভাবে কাজ করে - 2একটি ভুল অনুক্রমের উদাহরণ: জাভাতে রিফ্যাক্টরিং কীভাবে কাজ করে - 3

বিবৃতি পরিবর্তন করুন

একটি বিবৃতি সঙ্গে কি ভুল হতে পারে switch? এটা খুব জটিল হয়ে গেলে খারাপ হয়। একটি সম্পর্কিত সমস্যা হল নেস্টেড ifস্টেটমেন্টের একটি বড় সংখ্যা।

বিভিন্ন ইন্টারফেস সহ বিকল্প ক্লাস

একাধিক ক্লাস একই জিনিস করে, কিন্তু তাদের পদ্ধতির ভিন্ন নাম রয়েছে।

অস্থায়ী ক্ষেত্র

যদি একটি ক্লাসের একটি অস্থায়ী ক্ষেত্র থাকে যা একটি বস্তুর প্রয়োজন শুধুমাত্র মাঝে মাঝে যখন তার মান সেট করা হয়, এবং এটি খালি থাকে বা, ঈশ্বর নিষেধ করেন, nullবাকি সময়, তাহলে কোডটি গন্ধ পায়। এটি একটি সন্দেহজনক নকশা সিদ্ধান্ত.

গন্ধ যা পরিবর্তন করা কঠিন করে তোলে

এই গন্ধ আরও গুরুতর। অন্যান্য গন্ধগুলি প্রধানত কোড বোঝা কঠিন করে তোলে, কিন্তু এগুলি আপনাকে এটি পরিবর্তন করতে বাধা দেয়। আপনি যখন কোনো নতুন বৈশিষ্ট্য প্রবর্তন করার চেষ্টা করেন, তখন অর্ধেক ডেভেলপার কাজ ছেড়ে দেয় এবং অর্ধেক পাগল হয়ে যায়।

সমান্তরাল উত্তরাধিকার শ্রেণিবিন্যাস

এই সমস্যাটি নিজেই প্রকাশ পায় যখন একটি ক্লাস সাবক্লাস করার জন্য আপনাকে একটি ভিন্ন ক্লাসের জন্য আরেকটি সাবক্লাস তৈরি করতে হবে।

অভিন্নভাবে বিতরণ নির্ভরতা

যেকোনো পরিবর্তনের জন্য আপনাকে একটি ক্লাসের সমস্ত ব্যবহার (নির্ভরতা) সন্ধান করতে হবে এবং অনেক ছোট পরিবর্তন করতে হবে। একটি পরিবর্তন - অনেক ক্লাসে সম্পাদনা।

পরিবর্তনের জটিল গাছ

এই গন্ধটি আগেরটির বিপরীত: পরিবর্তনগুলি একটি শ্রেণিতে প্রচুর সংখ্যক পদ্ধতিকে প্রভাবিত করে। একটি নিয়ম হিসাবে, এই জাতীয় কোডের ক্যাসকেডিং নির্ভরতা রয়েছে: একটি পদ্ধতি পরিবর্তন করার জন্য আপনাকে অন্যটিতে কিছু ঠিক করতে হবে এবং তারপরে তৃতীয়টিতে এবং আরও অনেক কিছু। এক শ্রেণী—অনেক পরিবর্তন।

"আবর্জনার গন্ধ"

গন্ধের একটি বরং অপ্রীতিকর বিভাগ যা মাথাব্যথার কারণ হয়। অকেজো, অপ্রয়োজনীয়, পুরানো কোড। ভাগ্যক্রমে, আধুনিক আইডিই এবং লিন্টারগুলি এই ধরনের গন্ধ সম্পর্কে সতর্ক করতে শিখেছে।

একটি পদ্ধতিতে প্রচুর সংখ্যক মন্তব্য

একটি পদ্ধতির প্রায় প্রতিটি লাইনে অনেক ব্যাখ্যামূলক মন্তব্য রয়েছে। এটি সাধারণত একটি জটিল অ্যালগরিদমের কারণে হয়, তাই কোডটিকে কয়েকটি ছোট পদ্ধতিতে বিভক্ত করা এবং তাদের ব্যাখ্যামূলক নাম দেওয়া ভাল।

সদৃশ কোড

বিভিন্ন ক্লাস বা পদ্ধতি কোডের একই ব্লক ব্যবহার করে।

অলস ক্লাস

একটি ক্লাস খুব কম কার্যকারিতা নেয়, যদিও এটি বড় হওয়ার পরিকল্পনা করা হয়েছিল।

অব্যবহৃত কোড

একটি শ্রেণী, পদ্ধতি বা পরিবর্তনশীল কোডে ব্যবহৃত হয় না এবং এটি মৃত ওজন।

অত্যধিক সংযোগ

গন্ধের এই বিভাগটি কোডে প্রচুর সংখ্যক অযৌক্তিক সম্পর্কের দ্বারা চিহ্নিত করা হয়।

বাহ্যিক পদ্ধতি

একটি পদ্ধতি অন্য বস্তুর ডেটা তার নিজস্ব ডেটার চেয়ে অনেক বেশি ব্যবহার করে।

অনুপযুক্ত অন্তরঙ্গতা

একটি শ্রেণী অন্য শ্রেণীর বাস্তবায়ন বিবরণের উপর নির্ভর করে।

দীর্ঘ ক্লাস কল

একটি ক্লাস অন্যকে কল করে, যেটি তৃতীয়টির কাছ থেকে ডেটার অনুরোধ করে, যেটি চতুর্থ থেকে ডেটা পায় এবং আরও অনেক কিছু। কলের এত দীর্ঘ চেইন মানে বর্তমান শ্রেণী কাঠামোর উপর উচ্চ নির্ভরতা।

টাস্ক-ডিলার ক্লাস

একটি ক্লাস শুধুমাত্র অন্য ক্লাসে একটি টাস্ক পাঠানোর জন্য প্রয়োজন। হয়তো এটা অপসারণ করা উচিত?

রিফ্যাক্টরিং কৌশল

নীচে আমরা মৌলিক রিফ্যাক্টরিং কৌশল নিয়ে আলোচনা করব যা বর্ণিত কোডের গন্ধ দূর করতে সাহায্য করতে পারে।

একটি ক্লাস বের করুন

একটি ক্লাস অনেকগুলি ফাংশন সঞ্চালন করে। তাদের কিছু অন্য ক্লাসে সরানো আবশ্যক. উদাহরণস্বরূপ, ধরুন আমাদের একটি Humanক্লাস রয়েছে যা একটি বাড়ির ঠিকানাও সংরক্ষণ করে এবং একটি পদ্ধতি রয়েছে যা সম্পূর্ণ ঠিকানা প্রদান করে:
class Human {
    private String name;
    private String age;
    private String country;
    private String city;
    private String street;
    private String house;
    private String quarter;

    public String getFullAddress() {
        StringBuilder result = new StringBuilder();
        return result
                        .append(country)
                        .append(", ")
                        .append(city)
                        .append(", ")
                        .append(street)
                        .append(", ")
                        .append(house)
                        .append(" ")
                        .append(quarter).toString();
    }
 }
ঠিকানা তথ্য এবং সংশ্লিষ্ট পদ্ধতি (ডেটা প্রসেসিং আচরণ) একটি পৃথক ক্লাসে রাখা ভাল অনুশীলন:
class Human {
   private String name;
   private String age;
   private Address address;

   private String getFullAddress() {
       return address.getFullAddress();
   }
}
class Address {
   private String country;
   private String city;
   private String street;
   private String house;
   private String quarter;

   public String getFullAddress() {
       StringBuilder result = new StringBuilder();
       return result
                       .append(country)
                       .append(", ")
                       .append(city)
                       .append(", ")
                       .append(street)
                       .append(", ")
                       .append(house)
                       .append(" ")
                       .append(quarter).toString();
   }
}

একটি পদ্ধতি বের করুন

যদি একটি পদ্ধতিতে কিছু কার্যকারিতা থাকে যা বিচ্ছিন্ন করা যেতে পারে, তাহলে আপনাকে এটি একটি পৃথক পদ্ধতিতে স্থাপন করা উচিত। উদাহরণস্বরূপ, একটি পদ্ধতি যা একটি দ্বিঘাত সমীকরণের মূল গণনা করে:
public void calcQuadraticEq(double a, double b, double c) {
    double D = b * b - 4 * a * c;
    if (D > 0) {
        double x1, x2;
        x1 = (-b - Math.sqrt(D)) / (2 * a);
        x2 = (-b + Math.sqrt(D)) / (2 * a);
        System.out.println("x1 = " + x1 + ", x2 = " + x2);
    }
    else if (D == 0) {
        double x;
        x = -b / (2 * a);
        System.out.println("x = " + x);
    }
    else {
        System.out.println("Equation has no roots");
    }
}
আমরা তিনটি সম্ভাব্য বিকল্পের প্রতিটি পৃথক পদ্ধতিতে গণনা করি:
public void calcQuadraticEq(double a, double b, double c) {
    double D = b * b - 4 * a * c;
    if (D > 0) {
        dGreaterThanZero(a, b, D);
    }
    else if (D == 0) {
        dEqualsZero(a, b);
    }
    else {
        dLessThanZero();
    }
}

public void dGreaterThanZero(double a, double b, double D) {
    double x1, x2;
    x1 = (-b - Math.sqrt(D)) / (2 * a);
    x2 = (-b + Math.sqrt(D)) / (2 * a);
    System.out.println("x1 = " + x1 + ", x2 = " + x2);
}

public void dEqualsZero(double a, double b) {
    double x;
    x = -b / (2 * a);
    System.out.println("x = " + x);
}

public void dLessThanZero() {
    System.out.println("Equation has no roots");
}
প্রতিটি পদ্ধতির কোড অনেক ছোট এবং বোঝা সহজ হয়ে গেছে।

একটি সম্পূর্ণ বস্তু পাস

যখন একটি পদ্ধতি পরামিতি সহ কল ​​করা হয়, আপনি কখনও কখনও এই মত কোড দেখতে পারেন:
public void employeeMethod(Employee employee) {
    // Some actions
    double yearlySalary = employee.getYearlySalary();
    double awards = employee.getAwards();
    double monthlySalary = getMonthlySalary(yearlySalary, awards);
    // Continue processing
}

public double getMonthlySalary(double yearlySalary, double awards) {
     return (yearlySalary + awards)/12;
}
employeeMethodমান প্রাপ্তির জন্য এবং সেগুলিকে আদিম ভেরিয়েবলে সংরক্ষণ করার জন্য নিবেদিত 2টি সম্পূর্ণ লাইন রয়েছে । কখনও কখনও এই ধরনের নির্মাণ 10 লাইন পর্যন্ত নিতে পারে। বস্তুটি নিজেই পাস করা এবং প্রয়োজনীয় ডেটা বের করতে এটি ব্যবহার করা অনেক সহজ:
public void employeeMethod(Employee employee) {
    // Some actions
    double monthlySalary = getMonthlySalary(employee);
    // Continue processing
}

public double getMonthlySalary(Employee employee) {
    return (employee.getYearlySalary() + employee.getAwards())/12;
}

সহজ, সংক্ষিপ্ত এবং সংক্ষিপ্ত।

যৌক্তিকভাবে ক্ষেত্রগুলিকে গোষ্ঠীবদ্ধ করা এবং সেগুলিকে আলাদা করে সরানো হল classDespiteযে উপরের উদাহরণগুলি খুব সহজ, এবং আপনি যখন সেগুলি দেখেন, তখন আপনার মধ্যে অনেকেই জিজ্ঞাসা করতে পারেন, "কে এটা করে?", অনেক বিকাশকারী অসাবধানতার কারণে এই ধরনের কাঠামোগত ত্রুটিগুলি করে থাকেন, কোড রিফ্যাক্টর করতে অনিচ্ছা, বা "এটি যথেষ্ট ভাল" এর মনোভাব।

কেন রিফ্যাক্টরিং কার্যকর

ভালো রিফ্যাক্টরিংয়ের ফলস্বরূপ, একটি প্রোগ্রামে সহজে-পঠনযোগ্য কোড রয়েছে, এর লজিক পরিবর্তন করার সম্ভাবনা ভীতিজনক নয় এবং নতুন বৈশিষ্ট্যগুলি প্রবর্তন করা কোড বিশ্লেষণ নরকে পরিণত হয় না, বরং এটি কয়েক দিনের জন্য একটি আনন্দদায়ক অভিজ্ঞতা। . স্ক্র্যাচ থেকে একটি প্রোগ্রাম লেখা সহজ হলে আপনার রিফ্যাক্টর করা উচিত নয়। উদাহরণ স্বরূপ, ধরুন আপনার দল অনুমান করেছে যে স্ক্র্যাচ থেকে একই কার্যকারিতা বাস্তবায়নের চেয়ে বোঝা, বিশ্লেষণ এবং রিফ্যাক্টর কোডের জন্য প্রয়োজনীয় শ্রম বেশি হবে। অথবা যদি রিফ্যাক্টর করা কোডটিতে প্রচুর সমস্যা থাকে যা ডিবাগ করা কঠিন। কোডের গঠন কিভাবে উন্নত করা যায় তা জানা একজন প্রোগ্রামারের কাজে অপরিহার্য। এবং জাভাতে প্রোগ্রাম শেখা CodeGym-এ সর্বোত্তমভাবে সম্পন্ন হয়, অনলাইন কোর্স যা অনুশীলনের উপর জোর দেয়। তাৎক্ষণিক যাচাইকরণ সহ 1200+ কাজ, প্রায় 20টি মিনি-প্রকল্প, গেমের কাজগুলি - এই সমস্ত আপনাকে কোডিংয়ে আত্মবিশ্বাসী বোধ করতে সহায়তা করবে। শুরু করার সেরা সময় এখন :)

রিফ্যাক্টরিংয়ে নিজেকে আরও নিমজ্জিত করার জন্য সম্পদ

রিফ্যাক্টরিংয়ের সবচেয়ে বিখ্যাত বইটি হল মার্টিন ফাউলারের "রিফ্যাক্টরিং। ইমপ্রুভিং দ্য ডিজাইন অফ এক্সিস্টিং কোড"। রিফ্যাক্টরিং সম্পর্কে একটি আকর্ষণীয় প্রকাশনা রয়েছে, যা পূর্ববর্তী একটি বইয়ের উপর ভিত্তি করে: জোশুয়া কেরিয়েভস্কির "রিফ্যাক্টরিং ইউজিং প্যাটার্নস"। প্যাটার্নের কথা বলছি... রিফ্যাক্টরিং করার সময়, বেসিক ডিজাইন প্যাটার্নগুলি জানা সবসময়ই খুব দরকারী। এই চমৎকার বইগুলি এতে সাহায্য করবে: প্যাটার্নের কথা বলা... রিফ্যাক্টর করার সময়, বেসিক ডিজাইনের প্যাটার্নগুলি জানা সবসময়ই খুব দরকারী। এই চমৎকার বই এটি সাহায্য করবে:
  1. হেড ফার্স্ট সিরিজ থেকে এরিক ফ্রিম্যান, এলিজাবেথ রবসন, ক্যাথি সিয়েরা এবং বার্ট বেটসের "ডিজাইন প্যাটার্নস"
  2. ডাস্টিন বোসওয়েল এবং ট্রেভর ফাউচারের "দ্য আর্ট অফ রিডেবল কোড"
  3. স্টিভ ম্যাককনেলের "কোড কমপ্লিট", যা সুন্দর এবং মার্জিত কোডের নীতি নির্ধারণ করে।
মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই