আমি রিফ্যাক্টরিং সম্পর্কে এমন কিছু বিশ্বাস করতে পেরেছি যা আমি এখানে উল্লেখ করে দেখিনি, আমি জানি এখানে ইতিমধ্যে এখানে প্রচুর উত্তর রয়েছে তবে আমি মনে করি এটি নতুন।
শর্তগুলি উত্থাপিত হওয়ার আগে থেকেই আমি একজন নির্মম পরিশ্রমী এবং ডিআরওয়াইয়ের একজন দৃ strong় বিশ্বাসী। বেশিরভাগ ক্ষেত্রেই এটি আমার মাথায় একটি বৃহত কোডবেস রাখতে সমস্যা হয় এবং আংশিক কারণ আমি ডিআরওয়াই কোডিং উপভোগ করি এবং সিঅ্যান্ডপি কোডিং সম্পর্কে আমি কিছুই উপভোগ করি না, আসলে এটি আমার জন্য বেদনাদায়ক এবং ভীষণ ধীর।
বিষয়টি হ'ল, ডিআরওয়াইয়ের প্রতি জোর দেওয়া কিছু কৌশলতে আমাকে প্রচুর অনুশীলন দিয়েছে যা আমি অন্যদের ব্যবহার খুব কমই দেখি। অনেক লোক জোর দিয়েছিলেন যে জাভা DRY করা কঠিন বা অসম্ভব, তবে সত্যই তারা চেষ্টা করে না।
অনেক দিন আগের একটি উদাহরণ যা আপনার উদাহরণের সাথে কিছুটা মিল। লোকেরা ভাবেন জাভা জিইউআই সৃষ্টি শক্ত is অবশ্যই আপনি যদি এটি কোড করেন তবে:
Menu m=new Menu("File");
MenuItem save=new MenuItem("Save")
save.addAction(saveAction); // I forget the syntax, but you get the idea
m.add(save);
MenuItem load=new MenuItem("Load")
load.addAction(loadAction)
যে কেউ এটিকে কেবল উন্মাদ বলে মনে করে তা একেবারে সঠিক, তবে এটি জাভার দোষ নয় - কোডটি কখনও এভাবে লেখা উচিত নয়। এই পদ্ধতি কলগুলি অন্যান্য সিস্টেমে মোড়ানোর উদ্দেশ্যে কাজ করা হয়। আপনি যদি এই জাতীয় সিস্টেম খুঁজে না পান তবে এটি তৈরি করুন!
আপনি অবশ্যই এর মতো কোড করতে পারবেন না তাই আপনার পিছনে ফিরে সমস্যাটি দেখার দরকার আছে repeated পুনরাবৃত্ত কোডটি আসলে কী করছে? এটি কিছু স্ট্রিং এবং তাদের সম্পর্ক (একটি গাছ) নির্দিষ্ট করে এবং সেই গাছের পাতাগুলিকে ক্রিয়াতে যুক্ত করে। সুতরাং আপনি যা বলতে চান তা হ'ল:
class Menu {
@MenuItem("File|Load")
public void fileLoad(){...}
@MenuItem("File|Save")
public void fileSave(){...}
@MenuItem("Edit|Copy")
public void editCopy(){...}...
একবার আপনি নিজের সম্পর্কটিকে কোনওভাবে সংজ্ঞায়িত এবং বর্ণনামূলক হিসাবে সংজ্ঞায়িত করেছেন তারপরে আপনি এটি মোকাবেলা করার জন্য একটি পদ্ধতি লিখবেন - এই ক্ষেত্রে আপনি ক্লাসের পাশ করা পদ্ধতিগুলি পুনর্বিবেচনা করবেন এবং একটি গাছ বানাবেন তারপরে আপনার মেনুগুলি তৈরি করতে এটি ব্যবহার করুন এবং ক্রিয়াগুলি পাশাপাশি (স্পষ্টতই) একটি মেনু প্রদর্শন করে। আপনার কোনও সদৃশ হবে না, এবং আপনার পদ্ধতিটি পুনরায় ব্যবহারযোগ্য ... এবং প্রচুর মেনুর তুলনায় সম্ভবত লেখার পক্ষে আরও সহজ ছিল, এবং যদি আপনি প্রকৃতপক্ষে প্রোগ্রামিং উপভোগ করেন তবে আপনার অনেক বেশি মজা ছিল। এটি শক্ত নয় - আপনার যে পদ্ধতিটি লিখতে হবে তা সম্ভবত আপনার মেনু তৈরির চেয়ে কম লাইন হবে!
জিনিসটি হ'ল, এটি করার জন্য আপনাকে প্রচুর অনুশীলন করা দরকার। আপনার পুনরাবৃত্ত অংশগুলিতে অনন্য তথ্য ঠিক কী তা বিশ্লেষণে ভাল হওয়া দরকার, সেই তথ্যটি বের করুন এবং কীভাবে এটি ভালভাবে প্রকাশ করবেন তা নির্ধারণ করুন। স্ট্রিং পার্সিং এবং টীকাগুলির মতো সরঞ্জামগুলি ব্যবহার করতে শেখা অনেক সহায়তা করে। ত্রুটি প্রতিবেদন এবং ডকুমেন্টেশন সম্পর্কে সত্যিই পরিষ্কার হতে শেখা এছাড়াও খুব গুরুত্বপূর্ণ।
আপনি কেবলমাত্র ভাল কোডিংয়ের মাধ্যমে "ফ্রি" অনুশীলনটি পান - হ্যাক সম্ভাবনাগুলি হ'ল এটি একবার ভাল হয়ে গেলে আপনি দেখতে পাবেন যে কিছু ডিআরওয়াই (একটি পুনরায় ব্যবহারযোগ্য সরঞ্জাম লেখার সাথে সম্পর্কিত) কোডিং করা কপি করা এবং পেস্ট করা এবং সমস্ত ত্রুটিগুলি, সদৃশ ত্রুটির চেয়ে দ্রুত এবং কঠিন পরিবর্তন যা ধরণের কোডিংয়ের কারণ।
আমি মনে করি না যদি আমি ডিআরওয়াই কৌশলগুলি এবং বিল্ডিং সরঞ্জামগুলি যতটা পারি অনুশীলন না করতাম তবে আমি আমার কাজ উপভোগ করতে সক্ষম হব। যদি আমাকে কপি এবং পেস্ট প্রোগ্রামিং না করার জন্য বেতনের একটি কাটা নিতে হয়, আমি এটি নিয়েছিলাম।
সুতরাং আমার বিষয়গুলি হ'ল:
- কীভাবে রিফ্যাক্টর ভালভাবে করতে হয় তা না জানলে অনুলিপি এবং আটকানোতে আরও বেশি সময় লাগে।
- আপনি এটি করে ভাল রিফ্যাক্টর শিখতে পারেন - এমনকি ডিআইআরওয়ির উপর জোর দিয়ে এমনকি সবচেয়ে কঠিন ও মামুলি ক্ষেত্রেও।
- আপনি প্রোগ্রামার, যদি আপনার কোডটি ডিআরওয়াই করার জন্য আপনার যদি কোনও ছোট সরঞ্জাম প্রয়োজন হয় তবে এটি তৈরি করুন।
always
এবংnever
লাল পতাকা হিসাবে। একটা জিনিস "প্রসঙ্গ" বলা, কোথায়always
এবংnever
বিধি, এমনকি সাধারণভাবে ভাল হলে, না যে উপযুক্ত হতে পারে। রহস্যজনক ব্যবসায়ের ক্ষেত্রে সফ্টওয়্যার বিকাশকারীদের থেকে সাবধান থাকুন। ;)