আমাদের কোডবেস পুরানো এবং নতুন প্রোগ্রামারগণ, আমার মতো, দ্রুততার সাথে এটি করার জন্য শিখুন একতারতার জন্য। আমাদের কোথাও শুরু করতে হবে এই ভেবে, আমি এটি একটি ডেটা ধারক শ্রেণীর রিফ্যাক্টর হিসাবে নিজেই নিয়ে গেলাম:
- সেটার পদ্ধতিগুলি সরানো হয়েছে এবং সমস্ত ক্ষেত্র তৈরি করা হয়েছে
final
(আমি "final
ভাল" অক্ষতভাবে গ্রহণ করি)। সেটারগুলি কেবল কনস্ট্রাক্টারে ব্যবহৃত হয়েছিল, এটি দেখা যাচ্ছে, সুতরাং এর কোনও পার্শ্ব প্রতিক্রিয়া ছিল না had - একটি বিল্ডার শ্রেণি চালু করল
বিল্ডার শ্রেণিটি প্রয়োজনীয় ছিল কারণ কনস্ট্রাক্টর (যা প্রথম স্থানে রিফ্যাক্টরিং প্রম্পট করে) প্রায় 3 লাইনের কোড বিস্তৃত করে। এটির অনেকগুলি পরামিতি রয়েছে।
ভাগ্য যেমন এটি করতে পারে, আমার একজন সতীর্থ অন্য মডিউলে কাজ করছিলেন এবং সেটারগুলির প্রয়োজন হয়েছিল, কারণ তার প্রয়োজনীয় মানগুলি প্রবাহের বিভিন্ন পয়েন্টে উপলব্ধ হয়েছিল। সুতরাং কোডটি এরকম দেখাচ্ছে:
public void foo(Bar bar){
//do stuff
bar.setA(stuff);
//do more stuff
bar.setB(moreStuff);
}
আমি যুক্তি দিয়েছিলাম যে তার পরিবর্তে তাকে নির্মাতাকে ব্যবহার করা উচিত, কারণ সেটারগুলি থেকে মুক্তি পেয়ে ক্ষেতগুলি অপরিবর্তনীয় থাকতে দেয় (তারা আমাকে আগে অপরিবর্তনীয়তা সম্পর্কে কট্টর শুনতে পেয়েছিল), এবং কারণ বিল্ডাররা অবজেক্ট তৈরিতে লেনদেনের অনুমতি দেয়। আমি নিম্নলিখিত সিউডোকোডটি স্কেচ করেছি:
public void foo(Bar bar){
try{
bar.setA(a);
//enter exception-throwing stuff
bar.setB(b);
}catch(){}
}
যদি সেই ব্যতিক্রমটি আগুন জ্বলতে bar
থাকে তবে এতে দুর্নীতিগ্রস্ত ডেটা থাকবে, যা কোনও নির্মাতার সাথে এড়ানো হত:
public Bar foo(){
Builder builder=new Builder();
try{
builder.setA(a);
//dangerous stuff;
builder.setB(b);
//more dangerous stuff
builder.setC(c);
return builder.build();
}catch(){}
return null;
}
আমার সতীর্থরা জবাব দিয়েছিল যে প্রশ্নে ব্যতিক্রম কখনই চালিত হবে না, যা সেই নির্দিষ্ট কোডের জন্য যথেষ্ট উপযুক্ত, তবে আমি বিশ্বাস করি যে গাছটির জন্য বনটি অনুপস্থিত।
সমঝোতাটি ছিল পুরানো সমাধানটিতে ফিরে যাওয়া, কোনও প্যারামিটার ছাড়াই একটি কন্সট্রাক্টর ব্যবহার এবং প্রয়োজনীয় হিসাবে সেটারগুলি দিয়ে সবকিছু সেট করা। যুক্তি ছিল যে এই সমাধানটি KISS নীতি অনুসরণ করে, যা খনিটি লঙ্ঘন করে।
আমি এই সংস্থায় নতুন (months মাসেরও কম) এবং পুরোপুরি সচেতন যে আমি এইটি হারিয়েছি। আমার কাছে প্রশ্ন (গুলি) হ'ল:
- "পুরানো উপায়" এর পরিবর্তে বিল্ডার ব্যবহারের জন্য কি আর কোনও যুক্তি রয়েছে?
- আমি প্রস্তাবিত পরিবর্তনটি কি এটি সত্যই মূল্যবান?
কিন্তু সত্যিই,
- নতুন কিছুর চেষ্টা করার পক্ষে আপনার পক্ষে এ জাতীয় যুক্তি আরও ভালভাবে উপস্থাপন করার জন্য কোনও টিপস রয়েছে?
setA
?