নামকরণের ক্লাসগুলির সেরা পদ্ধতির কী?


92

ক্লাসগুলির জন্য ভাল, সুনির্দিষ্ট নাম নিয়ে আসা কুখ্যাতভাবে কঠিন। ডান হয়ে গেছে, এটি কোডটিকে আরও স্ব-ডকুমেন্টিং করে এবং কোড সম্পর্কে উচ্চতর স্তরে বিমূর্ততায় যুক্তি দেওয়ার জন্য একটি শব্দভাণ্ডার সরবরাহ করে।

যে শ্রেণিগুলি একটি নির্দিষ্ট নকশার প্যাটার্নটি বাস্তবায়িত করে তাদের পরিচিত প্যাটার্নের নামের উপর ভিত্তি করে একটি নাম দেওয়া যেতে পারে (যেমন: ফুফ্যাক্টরি, ফুফ্যাক্যাড), এবং ক্লাসগুলি যা সরাসরি ডোমেন ধারণাগুলি তাদের নাম ডোমেন সমস্যা ডোমেন থেকে নিতে পারে, তবে অন্যান্য শ্রেণীর কী হবে? প্রোগ্রামার থিসৌরসের মতো কি এমন কিছু আছে যা আমি যখন অনুপ্রেরণার অভাবের দিকে ফিরে যেতে পারি এবং জেনেরিক শ্রেণির নামগুলি (যেমন FooHandler, FooProcessor, FooUtils এবং FooManager) ব্যবহার করা এড়াতে চাই?


6
এটি একটি চমৎকার প্রশ্ন! এটি বন্ধ করা আইএমএইচওকে বিচার্য নয়, প্রোগ্রামারগুলির সাইট মাইগ্রেট করা ভাল।
টিমোফাই

4
আমি সম্মত, পুনরায় খোলা বা সরানো উচিত
ftl


"ক্যাস্পার ওয়ান দ্বারা বন্ধ" এই দুর্দান্ত প্রশ্নগুলি আমি অনেকগুলি দেখেছি। তিনি উইকিপিডিয়ায় মুছে ফেলার জন্য কাজ করতে পারেন?
পেরেলাটার

উত্তর:


59

আমি কেন্ট বেক দ্বারা বাস্তবায়ন প্যাটার্নগুলি থেকে কিছু অংশ উদ্ধৃত করব :

সাধারণ সুপারক্লাসের নাম

"[...] নামগুলি সংক্ষিপ্ত এবং খোঁচা হওয়া উচিত However তবে নামগুলি সুনির্দিষ্ট করার জন্য মাঝে মাঝে বেশ কয়েকটি শব্দের প্রয়োজন মনে হয় d এই দ্বিধা থেকে বেরিয়ে আসার একটি উপায় গণনার পক্ষে একটি শক্তিশালী রূপক গ্রহণ করছে a রূপক মনে রেখেও, এমনকি একক শব্দগুলি তাদের সাথে অ্যাসোসিয়েশন, সংযোগ এবং প্রভাবগুলির সমৃদ্ধ ওয়েব নিয়ে আসে the উদাহরণস্বরূপ, হটড্র অঙ্কন কাঠামোতে অঙ্কনের কোনও অবজেক্টের জন্য আমার প্রথম নাম ছিল ড্রইংঅবজেক্ট Ward ওয়ার্ড কানিংহাম টাইপোগ্রাফির রূপক সহ এসেছিল: একটি অঙ্কন এর মতো একটি মুদ্রিত, বিছিন্ন পৃষ্ঠা a একটি পৃষ্ঠায় গ্রাফিকাল আইটেমগুলি চিত্রগুলি হয়, তাই শ্রেণিটি চিত্র হয়ে ওঠে the রূপকের প্রসঙ্গে, চিত্র চিত্র একই সাথে সংক্ষিপ্ত, আরও সমৃদ্ধ এবং অঙ্কনঅবজেক্টের চেয়ে আরও সুনির্দিষ্ট । "

যোগ্য সাবক্লাস নাম

"সাবক্লাসের নাম দুটি কাজ করে They তারা কোন শ্রেণীর মত এবং কীভাবে তারা আলাদা তা তাদের যোগাযোগ করা দরকার [[...] শ্রেণিবদ্ধের শিকড়ের নামগুলির বিপরীতে সাবক্লাসের নামগুলি প্রায়শই কথোপকথনে ব্যবহৃত হয় না, যাতে তারা সংক্ষিপ্ত হওয়ার দামে ভাব প্রকাশ করতে পারে [[...]

সাবক্লাসগুলি দিন যা শ্রেণিবদ্ধের মূল হিসাবে তাদের নিজস্ব সাধারণ নাম হিসাবে পরিবেশন করে। উদাহরণস্বরূপ, হটড্রের একটি ক্লাস হ্যান্ডল রয়েছে যা চিত্র নির্বাচন করা হলে চিত্র-সম্পাদনা ক্রিয়াকলাপ উপস্থাপন করে। এটিকে বলা হয়, সরলভাবে, চিত্র বাড়ানোর পরেও হ্যান্ডেল । হ্যান্ডলগুলির একটি সম্পূর্ণ পরিবার রয়েছে এবং তাদের সবচেয়ে উপযুক্তভাবে স্ট্রেচিহ্যান্ডল এবং ট্রান্সপারেন্সিহ্যান্ডেলের মতো নাম রয়েছে । হ্যান্ডেল তার নিজস্ব শ্রেণিবিন্যাসের মূল কারণ , এটি একটি উপযুক্ত সাবক্লাস নামের চেয়ে একটি সাধারণ সুপারক্লাস নামের প্রাপ্য।

সাবক্লাসের নামকরণে আর একটি ঝকঝকে হ'ল একাধিক স্তরের স্তরক্রম। [...] তাত্ক্ষণিক সুপারক্লাসে অন্ধভাবে সংশোধনকারীদের প্রস্তুত করার পরিবর্তে নামটি পাঠকের দৃষ্টিকোণ থেকে ভাবুন। এই ক্লাসটি কেমন তা জানতে তাঁর কী ক্লাস দরকার? সাবক্লাস নামের ভিত্তি হিসাবে সেই সুপারক্লাসটি ব্যবহার করুন "

ইন্টারফেস

নামকরণ ইন্টারফেসের দুটি স্টাইল নির্ভর করে আপনি কীভাবে ইন্টারফেসগুলি নিয়ে ভাবছেন on বাস্তবায়ন ছাড়াই ক্লাস হিসাবে ইন্টারফেসগুলির নামকরণ করা উচিত যেন তারা শ্রেণি ( সাধারণ সুপারক্র্লাসের নাম , যোগ্য সাবক্লাসের নাম )। এই স্টাইলের নামকরণের সাথে একটি সমস্যা হ'ল নামকরণ ক্লাসে নামার আগে ভাল নামগুলি ব্যবহার করা হয়। নামক একটি ইন্টারফেস ফাইল এরকম কিছু বলা একটি বাস্তবায়ন বর্গ প্রয়োজন ActualFile , ConcreteFile , অথবা (Yuck!) FileImpl(প্রত্যয় এবং একটি সংক্ষিপ্তসার উভয়)। সাধারণভাবে, কেউ কংক্রিট বা বিমূর্ত বস্তুর সাথে কাজ করছে কিনা তা নিয়ে কথা বলা গুরুত্বপূর্ণ, বিমূর্ত বস্তুটি একটি ইন্টারফেস হিসাবে প্রয়োগ করা হয় বা সুপারক্লাস কম গুরুত্বপূর্ণ কিনা। ইন্টারফেস এবং সুপারক্লাসগুলির মধ্যে পার্থক্য উল্লেখ করা ভালভাবে> নামকরণের এই স্টাইল দ্বারা সমর্থিত, যদি পরে> আপনার প্রয়োজন হয় তবে আপনার মন পরিবর্তন করতে মুক্ত রাখবেন।

কখনও কখনও, কেবলমাত্র কংক্রিট ক্লাসের নামকরণ যোগাযোগের ক্ষেত্রে ইন্টারফেসের ব্যবহার আড়াল করার চেয়ে গুরুত্বপূর্ণ। এই ক্ষেত্রে, "আই" সহ প্রিফিক্স ইন্টারফেসের নামগুলি। ইন্টারফেসটিকে যদি আইফাইল বলা হয় তবে ক্লাসটিকে কেবল ফাইল বলা যেতে পারে ।

আরও বিস্তারিত আলোচনার জন্য বইটি কিনুন! এটা জরুরী! :)


4
"কখনও কখনও, ইন্টারফেসের ব্যবহার আড়াল করার চেয়ে যোগাযোগের জন্য কেবল কংক্রিট ক্লাসের নামকরণই আরও গুরুত্বপূর্ণ। এক্ষেত্রে," আই "দিয়ে উপসর্গের ইন্টারফেসের নাম the ইন্টারফেসটিকে আইফাইল বলা হলে ক্লাসটিকে কেবল ফাইল বলা যেতে পারে।" এটি খুব মজার, কারণ রবার্ট সি মার্টিনের ক্লিন কোড বইটিতে, আমি জানতে পেরেছি যে আমরা আইফাইলের মতো ইন্টারফেসটির নামকরণ না করে ফাইল প্রয়োগের নামকরণ করব, কারণ ক্লায়েন্টকে আমরা জানতে চাই না যে আমরা তাদের পরিবেশন করছি ইন্টারফেস. এবং বইটিতে the আপনি যে বইটির উল্লেখ করছেন সেই বইয়ের উদ্ধৃতি রয়েছে :)
ক্রিশ্চিয়ান সিওবোটিয়া

39

সর্বদা মাইক্লাসএ, মাইক্র্লাসবি - এর জন্য যান - এটি একটি দুর্দান্ত আলফা বাছাইয়ের অনুমতি দেয় ..

মজা করছি!

এটি একটি ভাল প্রশ্ন এবং এমন কিছু যা আমি খুব বেশিদিন আগে অনুভব করেছি। আমি কর্মক্ষেত্রে আমার কোডবেসটি পুনর্গঠিত করছিলাম এবং কোথায় কী রাখব এবং কী বলব তা নিয়ে সমস্যা হচ্ছিল ..

বাস্তব সমস্যা?

আমার ক্লাস ছিল অনেক বেশি। আপনি যদি একক দায়িত্বের নীতিটি মেনে চলার চেষ্টা করেন তবে এটি সমস্ত কিছু একসাথে আরও সুন্দর করে তুলবে .. এক একঘেয়ে প্রিন্টহ্যান্ডার ক্লাসের পরিবর্তে , আপনি এটিকে পেজহ্যান্ডলার , পেজ ফরমেটার (এবং আরও কিছু) ভাঙতে পারেন এবং তারপরে একটি মাস্টার প্রিন্টার শ্রেণি থাকতে পারে যা সব একত্রিত করে।

আমার পুনরায় সংগঠনে, আমার সময় লেগেছে, তবে আমি অনেকগুলি নকল কোড বিন্যাসে শেষ করেছি, আমার কোডবেসটি আরও যুক্তিযুক্ত পেয়েছি এবং ক্লাসে অতিরিক্ত পদ্ধতি নিক্ষেপ করার আগে যখন চিন্তাভাবনা করা আসে তখন অনেক কিছু ঘটে যায়: ডি

আমি তবে প্যাটার্ন নামের মতো জিনিসগুলিকে শ্রেণীর নামের মধ্যে রাখার পরামর্শ দিচ্ছি না । ক্লাস ইন্টারফেসটি এটিকে সুস্পষ্ট করে তুলতে হবে (যেমন একটি সিঙ্গলটনের জন্য কনস্ট্রাক্টর লুকিয়ে রাখা)। জেনেরিক নামটিতে কোনও সমস্যা নেই, যদি শ্রেণিটি জেনেরিক উদ্দেশ্যে পরিবেশন করে।

শুভকামনা!


শ্রেণীর নামে প্যাটার্নের নাম না দেওয়ার সাথে একমত হন। বাস্তবায়ন পরিবর্তিত হলে পরে যদি প্যাটার্নটি পরিবর্তন হয়?
thegreendroid

4
আমি বরং একটি নামে প্যাটার্নের একটি নাম রাখি। কেন? কারণ যদি আমি বাস্তবায়ন বিশদটি দেখতে (যেমন বেসরকারী নির্মাতার) দেখতে হয় যে এটি একটি সিঙ্গলটন, যা আমাকে পাঠক হিসাবে ধীর করে দিচ্ছে এবং আমার দক্ষতার স্তরের উপর নির্ভর করে, আমি বুঝতে পারি না যে এটি আসলে একটি শ্রেণীর অংশ সাধারণ প্যাটার্ন। সিঙ্গলটন এবং প্রাইভেট কনস্ট্রাক্টর একটি সন্দেহজনক উদাহরণ, তবে আরও জটিল নিদর্শনগুলির জন্য (দর্শনার্থী, অ্যাডাপ্টার ইত্যাদি) এটি বেশ জটিল হয়ে উঠছে। যদি প্যাটার্নটি পরিবর্তিত হয়, তবে চেকগুলি হ'ল সেই শ্রেণিগুলির আর অস্তিত্ব থাকবে না ...
dragan.stepanovic

28

ভাল এপিআই ডিজাইন সম্পর্কে জোশ ব্লচের দুর্দান্ত আলাপের পরামর্শের কয়েকটি ভাল বিট রয়েছে:

  • ক্লাসগুলির একটি কাজ করা উচিত এবং এটি ভালভাবে করা উচিত।
  • যদি কোনও শ্রেণীর নাম উল্লেখ করা বা ব্যাখ্যা করা শক্ত হয় তবে সম্ভবত এটি পূর্বের বুলেট পয়েন্টের পরামর্শ অনুসরণ করছে না।
  • শ্রেণীর নামটি ক্লাসটি কী তা তাৎক্ষণিকভাবে যোগাযোগ করা উচিত।
  • ভাল নামগুলি ভাল ডিজাইন চালায়।

যদি আপনার সমস্যাটি হয় উদ্ভাসিত অভ্যন্তরীণ ক্লাসগুলির নাম কী, তবে আপনার সেগুলি একটি বৃহত শ্রেণিতে সংহত করা উচিত।

যদি আপনার সমস্যাটি এমন একটি শ্রেণীর নামকরণ করে যা বিভিন্ন স্টাফ করছে, তবে আপনার এটি একাধিক শ্রেণিতে বিভক্ত করার বিষয়টি বিবেচনা করা উচিত।

যদি এটি সর্বজনীন এপিআই এর জন্য ভাল পরামর্শ তবে এটি অন্য কোনও শ্রেণীর পক্ষে আঘাত করতে পারে না।


4
ইউটিউবে ভিডিও লিঙ্ক youtube.com/watch?v=aAb7hSCtvGw
অ্যান্ড্রু হ্যারি

12

যদি আপনি কোনও নামের সাথে আটকে থাকেন তবে কখনও কখনও এটির পরে সংশোধন করার প্রতিশ্রুতি সহ কোনও অর্ধ-সংবেদনশীল নাম দেওয়া ভাল কৌশল।

প্যারালাইসিস নামকরণ করবেন না। হ্যাঁ, নামগুলি খুব গুরুত্বপূর্ণ তবে এগুলি প্রচুর পরিমাণে সময় নষ্ট করার পক্ষে যথেষ্ট গুরুত্বপূর্ণ নয়। যদি আপনি 10 মিনিটে কোনও ভাল নামটি ভাবতে না পারেন তবে এগিয়ে যান।


9

যদি ভাল নামটি মনে না আসে তবে আমি সম্ভবত প্রশ্ন করব যে আরও গভীর সমস্যা আছে কিনা - বর্গটি কি কোনও ভাল উদ্দেশ্যে কাজ করছে? যদি এটি হয় তবে নামকরণ এটি বেশ সহজবোধ্য হওয়া উচিত।


3

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

এটি বলেছিল, আরও নির্দিষ্টতা এই নির্দিষ্ট উদাহরণের জন্য ক্ষতি করবে না। "প্রক্রিয়া" একটি দুর্দান্ত বিস্তৃত শব্দ। উদাহরণস্বরূপ, এটি কি আসলেই একটি "FooUpdateProcessor" (যা "FooUpdater" হয়ে উঠতে পারে)? নামকরণ সম্পর্কে আপনাকে খুব "সৃজনশীল" পেতে হবে না, তবে আপনি কোডটি লিখলে আপনার সম্ভবত এটি কী করবে এবং কী করবে না তার সম্পর্কে মোটামুটি ভাল ধারণা আছে।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.