একক দায়িত্বের নীতি
("প্রত্যেক শ্রেণীর কেবলমাত্র একটি একক দায়িত্ব থাকতে হবে; অন্য কথায়, প্রতিটি শ্রেণীর একটি, এবং শুধুমাত্র একটি, পরিবর্তনের কারণ থাকতে হবে")
আমি একমত নই আমি মনে করি একটি পদ্ধতি শুধুমাত্র এক কারণে পরিবর্তন করতে হবে উচিত, এবং কোন ক্লাসে সব পদ্ধতি একটি থাকতে হবে এক-অপরের সাথে যৌক্তিক সম্পর্ক কিন্তু শ্রেণী নিজেই আসলে পারে না কয়েকটি (সাথে সম্পর্কিত) জিনিস।
আমার অভিজ্ঞতায়, এই নীতিটি প্রায়শই অত্যধিক উদ্যোগের সাথে প্রয়োগ করা হয় এবং আপনি অনেক ক্ষুদ্র এক-পদ্ধতি ক্লাস দিয়ে শেষ করেন। আমি যে চটপটে দোকানে কাজ করেছি উভয়ই এটি করেছে।
কল্পনা করুন যে। নেট এপিআই-র নির্মাতাদের যদি এই ধরণের মানসিকতা থাকে: তালিকা.সোর্ট (), তালিকা.বিপরীত (), তালিকা.ফিন্ড () ইত্যাদি এর চেয়ে আমাদের লিস্টসোর্টার, তালিকা-রিভার্সার এবং তালিকা অনুসন্ধানকারী শ্রেণি থাকে!
এসআরপি-র বিরুদ্ধে আর তর্ক করার পরিবর্তে (যা তাত্ত্বিকভাবে নিজেই ভয়ানক নয়) , আমি আমার দীর্ঘ-ঘূর্ণিত কাহিনীভিত্তিক কয়েকটি অভিজ্ঞতা শেয়ার করব:
আমি যেখানে কাজ করেছি সেখানে আমি একটি খুব সাধারণ সর্বোচ্চ প্রবাহ সলভার লিখেছিলাম যা পাঁচটি ক্লাস নিয়ে গঠিত: একটি নোড, একটি গ্রাফ, একটি গ্রাফ-স্রষ্টা, একটি গ্রাফ-দ্রাবক এবং গ্রাফ-স্রষ্টার / সমাধানকারীকে সমাধান করার জন্য সমাধান করার জন্য একটি শ্রেণি বাস্তব বিশ্বের সমস্যা কোনওটিই বিশেষত জটিল বা দীর্ঘ ছিল না (সলভারটি দীর্ঘতম ~ 150 লাইনে দীর্ঘতম ছিল)। যাইহোক, সিদ্ধান্ত নেওয়া হয়েছিল যে ক্লাসগুলির অনেকগুলি "দায়িত্ব" ছিল, তাই আমার সহকর্মীরা কোডটি রিফ্যাক্টরিংয়ের বিষয়ে সেট করেছিলেন। যখন সেগুলি করা হয়েছিল, আমার 5 টি ক্লাসগুলি 25 টি ক্লাসে প্রসারিত করা হয়েছিল, যার মোট লাইন অফ-কোডটি তারা মূলত ত্রিগুণের চেয়ে বেশি ছিল। কোডের প্রবাহটি আর স্পষ্ট ছিল না, বা নতুন ইউনিট-পরীক্ষার উদ্দেশ্যও ছিল না; আমার নিজের কোডটি কী করেছে তা খুঁজে পেতে এখন আমার খুব কষ্ট হয়েছিল।
একই জায়গায়, প্রায় প্রতিটি শ্রেণীর কেবল একটি একক পদ্ধতি ছিল (এটির একমাত্র "দায়িত্ব")। প্রোগ্রামের মধ্যে প্রবাহ অনুসরণ করা প্রায় অসম্ভব ছিল, এবং বেশিরভাগ ইউনিট-পরীক্ষাগুলিতে এই শ্রেণিটি অন্য শ্রেণির কোড নামে পরিচিত বলে পরীক্ষার সমন্বয়ে গঠিত হয়েছিল, যার উদ্দেশ্য উভয়ই আমার কাছে সমান রহস্য ছিল were আক্ষরিক অর্থে কয়েকশো ক্লাস ছিল যেখানে আইএমও হওয়া উচিত ছিল মাত্র কয়েক ডজন। প্রতিটি শ্রেণি একটি মাত্র "জিনিস" করেছিল , তবে "অ্যাডমিনিউসারক্রিয়েশনএটেম্পটারফ্যাক্টরি" এর মতো নামকরণের সম্মেলনের সাথেও , ক্লাসগুলির মধ্যে সম্পর্কটি বলা মুশকিল ছিল।
অন্য একটি জায়গায় (যার ক্লাসগুলিরও একমাত্র এক-পদ্ধতি মানসিকতা ছিল), আমরা একটি পদ্ধতি অপ্টিমাইজ করার চেষ্টা করছিলাম যা একটি নির্দিষ্ট অপারেশনের সময় 95% সময় নিয়েছিল। এটিকে কিছুটা অপ্টিমাইজ করার পরে (বরং মূর্খতার সাথে) কেন আমি এটিকে বাজিলিয়ন বার বলা হচ্ছে তার দিকে আমার দৃষ্টি নিবদ্ধ করেছিলাম। এটিকে একটি ক্লাসে একটি লুপে ডাকা হয়েছিল ... যার পদ্ধতিটি অন্য শ্রেণিতে লুপে ডাকা হচ্ছিল .. যা একটি লুপেও ডাকা হচ্ছিল ..
সবই বলা হয়েছে, ১৩ টি শ্রেণিতে (গুরুতরভাবে) পাঁচটি স্তরের লুপ ছড়িয়ে পড়েছিল। যে কোনও একটি শ্রেণি আসলে যা করছিল তা কেবল এটি দেখার দ্বারা নির্ধারণ করা অসম্ভব - আপনাকে কী পদ্ধতিগুলি বলা হয় এবং কী কী পদ্ধতিগুলি এই পদ্ধতিগুলি ডাকে, ইত্যাদি একটি মানসিক গ্রাফ স্কেচ করতে হয়েছিল। যদি এগুলি সমস্তই একটি পদ্ধতিতে ফেলা হত তবে এটি আমাদের সমস্যা-পদ্ধতির সাথে পাঁচটি তাত্ক্ষণিকভাবে সুস্পষ্ট স্তরের ভিতরে থাকা দ্বারা প্রায় 70 টি লাইন দীর্ঘ হত long
সেই 13 ক্লাসগুলিকে এক শ্রেণিতে রেফ্যাক্টর করার জন্য আমার অনুরোধ অস্বীকার করা হয়েছিল।