বিমূর্ত ক্লাসগুলির সাধারণ নামগুলি কীভাবে এড়ানো যায়?


10

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

  • ক্লায়েন্ট হিসাবে উদ্ভূত ক্লাসগুলি আচরণ করা এবং এটি প্রয়োগ করা কার্যকারিতার অংশ অনুসারে বেস ক্লাসটির নামকরণ করা আরও ভাল? এটি আরও অর্থ প্রদান করে তবে লঙ্ঘন করবে-এ। উদাহরণস্বরূপ ইমেলএকুইয়ারার একটি যুক্তিসঙ্গত নাম হবে যেহেতু এটি উদ্ভূত শ্রেণীর জন্য অর্জন করছে তবে উত্পন্ন শ্রেণি কারওর জন্য অর্জন করবে না।
  • বা প্রাপ্ত সত্যিকারের অস্পষ্ট নাম যেহেতু উত্পন্ন ক্লাসগুলি কী করবে কে জানে। আইএমএপি লগ ইন এবং ব্যবহারের মতো অনেক প্রাসঙ্গিক ক্রিয়াকলাপ হ'ল তবে "প্রসেসর" এখনও সাধারণ।

এই দ্বিধা থেকে কোন উপায়?

বিমূর্ত পদ্ধতিগুলির জন্য সমস্যাটি আরও স্পষ্ট, যেখানে আপনি "এটি কী করে?" প্রশ্নের উত্তরটি সত্যিই দিতে পারবেন না? কারণ উত্তরটি কেবল "ক্লায়েন্ট যা চায় তাই"।


"সাধারণভাবে" দাবির জন্য আপনার কাছে কি কোনও উত্স (এবং কিছু প্রসঙ্গ আছে)? এছাড়াও, তালিকার জন্য অতিরিক্ত নামকরণের নিয়ম - সম্ভবত কোনও অস্তিত্ব নেই এমন একটি নিখুঁত নাম খুঁজতে সময় নষ্ট করবেন না। যদি সন্দেহ হয় তবে আপনি এটি করতে পারেন সেরা নাম দিন, একটি মন্তব্য হিসাবে এটি প্রয়োজন হিসাবে সংজ্ঞায়িত হিসাবে একটি দীর্ঘ বিবরণ যোগ করুন, কিন্তু কেউ আপনার পছন্দ পছন্দ না করে বা আপনি যখন সঠিক নামটি হঠাৎ আপনার কাছে আসে তখন আপনি পরে সবসময় রিফ্যাক্টর করতে পারেন ' অন্য কিছু করছি।
স্টিভ 314

3
@ স্টিভ 314 - হ্যাঁ, স্টিভ ম্যাককনেল, কোড সম্পূর্ণ, প্রথম সংস্করণ, রুটিনে অধ্যায় 4 বা 5। এই অধ্যায়গুলিতে নামকরণের বিষয়ে বিস্তৃত আলোচনা, মূলত এই সিদ্ধান্তে অবতীর্ণ হয় যে আপনার যদি ভাল নাম না থাকে তবে আপনার সম্ভবত ভাল ফাংশন নেই।
djechlin

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

1
@ স্টিভ 314 প্রোগ্রামিং সম্পূর্ণরূপে জটিলতা পরিচালনা সম্পর্কে, এবং যদি আপনার মস্তিষ্ক কোনও কিছুর জন্য একটি শব্দও না নিয়ে আসতে পারে তবে খুব ভাল সম্ভাবনা থাকে যখন যখন এটি ব্যবহার করার মতো জিনিসগুলি করতে হয় তখন এটি তার জটিলতা পরিচালনা করতে সক্ষম হবে না it বড় বাক্য বা বড় সিস্টেমের অংশ হিসাবে। একটি ভাল নাম খুঁজে পাওয়া অক্ষমতা বলতে উদ্বেগের বিরতি রাখার একটি বড় কারণ এটি আসলে সাহসের দাবিদার নয়। তবে এটি ম্যাককনলেতে ব্যাপকভাবে আলোচিত হয়েছে, আমি কমপক্ষে সেই দুটি অধ্যায় পড়ার পরামর্শ দেব যদিও পুরো বইটি কভার-টু-কভার পড়ার পক্ষে মূল্যবান।
djechlin

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

উত্তর:


10

সমস্যাটির নাম নয়, আপনি এক শ্রেণিতে খুব বেশি চাপ দিচ্ছেন।

আপনার উদাহরণ শ্রেণিতে কিছু অংশ খুব কংক্রিটের (মেইলগুলি কীভাবে প্রাপ্ত হবে)। অন্যান্য অংশগুলি খুব বিমূর্ত (আপনি মেইলগুলি দিয়ে কী করবেন)।

উত্তরাধিকারের চেয়ে পৃথক শ্রেণীর সাথে এটি করা ভাল।

আমার পরামর্শ:

  • একটি বিমূর্ত মেসেজআইট্রেটর, একটি পপমইলবক্সডাউনলোডার দ্বারা উপবিষ্ট

  • অন্য ক্লাস যা একটি পপমইলবক্সডাউনলোডারকে OWNS করে এবং বার্তাগুলি দিয়ে কিছু করে।


এটা ঠিক ঠিক শোনাচ্ছে। দেখে মনে হচ্ছে আপনি যদি নিজেকে "প্রসেসভেন্ট" বা একটি শ্রেণীর "ম্যাসেজপ্রসেসর" নামকরণ করে দেখেন তবে উত্সের পরিবর্তে আপনি রচনাটির উপর নকশা তৈরি করতে পারার একটি ভাল সুযোগ রয়েছে। এক্ষেত্রে এটি একটি ট্রেডঅফ, রক্ষণাবেক্ষণকারীদের হিসাবে নমনীয়তা কার্যকর হতে পারে তবে প্রতিটি ফাংশনটি ঠিক কী করে তা ভেবে ভেবে ক্লায়েন্ট বিরক্ত হবেন (রক্ষণাবেক্ষণকারী ছাড়াও) than
djechlin

6

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

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

"প্রসেসর" এর মতো জেনেরিক নামগুলি ব্যবহার করার সময় আমি কোনও সমস্যা দেখতে পাই না যদি এটি কোনও বিমূর্ত শ্রেণীর জেনেরিক উদ্দেশ্য প্রতিফলিত করে।

এক বা দুটি দৃশ্যে কোনও শ্রেণীর উদ্দেশ্য বর্ণনা করতে আপনার যদি সমস্যা হয় তবে আপনার নকশার সমস্যা হতে পারে। ক্লাসটি খুব বেশি করছে এবং একক দায়িত্বের নীতি লঙ্ঘন করছে । এটি বিমূর্ত ক্লাসগুলির ক্ষেত্রেও প্রযোজ্য।


2

ফ্র্যাঙ্ক জাপ্পাকে প্যারাফ্রেজ করতে, এটি যা হয় এবং সেইভাবে নামকরণ করা উচিত। আপনার উদাহরণটি কী ধরণের প্রক্রিয়াজাতকরণ চলছে তার গভীর খনন করে না। এটি একটি EmailToTroubleTicketProcessor, একটি EmailGrammarCorrectorবা একটি EmailSpamDetector?

বিমূর্ত পদ্ধতিগুলির জন্য সমস্যাটি আরও স্পষ্ট, যেখানে আপনি "এটি কী করে?" প্রশ্নের উত্তরটি সত্যিই দিতে পারবেন না? কারণ উত্তরটি কেবল "ক্লায়েন্ট যা চায় তাই"।

এটা ঠিক সত্য নয়; প্রশ্ন আপনি কিছু বিমূর্ত জন্য উত্তর দিতে পারছি না হয় " কিভাবে এটা কাজ করে এটি কী?" কারণ এটি বাস্তবায়ন-নির্দিষ্ট। যদি কোনও EmailSenderশ্রেণীর কোনও DeliveryStatus deliver(Email e)পদ্ধতি থাকে তবে একটি ইমপ্লিড চুক্তি রয়েছে যে একটি বাস্তবায়ন ইমেল নেবে, এটি সরবরাহ করার চেষ্টা করুন এবং এটি কীভাবে চলেছে সে সম্পর্কে কিছু স্থিতি ফিরিয়ে আনুন। এটি কোনও এসএমটিপি সার্ভারের সাথে সংযোগযুক্ত কিনা বা প্রয়োগের প্রতিশ্রুতি অনুসারে যতক্ষণ বাস্তবায়নের প্রতিশ্রুতি দিয়েছিল ততক্ষণ তা কোনও হোমিং কবুতরের কাছে স্ট্রেপ হওয়ার জন্য প্রিন্ট করে কিনা তা আপনার খেয়াল নেই। বিমূর্তি কেবল এই প্রতিশ্রুতির পরিমাণকে মাপ দেয় যাতে একটি বাস্তবায়ন বলতে পারে, "হ্যাঁ, আমি এটি করি।"


শেষ ফাংশনটি যখন কোনও অর্থে টার্মিনালে থাকে তখন কীভাবে বিমূর্ত শ্রেণিটি "এবং এটি এখানে আপনি যা চান তা করুন?" উদাহরণস্বরূপ, পদ্ধতিটির কোনও স্থিতি, অকার্যকর রিটার্নের ধরণ, নো-থ্রোকের অ্যাক্সেস নেই।
djechlin

এটি এখনও একই জিনিস। এমনকি যদি আপনার পদ্ধতিটি হয় তবে void doWhatYouDoWith(Email e)আপনি ক্লাসটিকে একটি বলতে পারেন EmailDisposer, যা এটি করার জন্য যথেষ্ট নির্দিষ্ট তবে এটি সাধারণভাবে যথেষ্ট যে এটি প্রয়োগের ক্ষেত্রে কীভাবে চলে। যদিও আমি মনে করি @ ক্রিসভ্যানবেল এটি পেরেক দিয়েছিল: আপনি যদি এমন কিছু অস্পষ্টতার সাথে অবলম্বন করেন তবে এক ছাদের নীচে খুব বেশি কিছু থাকতে পারে।
ব্লিফ্লায়

0

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


"ইমেইলবেসক্লাস" "এজেন্টজার" নামকরণের মতো হবে int age, এটির থেকে আরও খারাপ যেহেতু আমি এ থেকে সাধারণ পাঠ্য ইমেল, মাইমির ইমেলগুলি প্রাপ্ত করার আশা করব। abstractপ্রথমে শব্দের আগে কী রয়েছে তা বর্ণনা করার দরকার নেই (এটি জাভা)। আপনার এই শ্রেণীর বেস অংশের জন্য কোনও বিশেষ অন্তর্দৃষ্টি আছে? এবং আরও অন্তর্দৃষ্টি এখনও এমন কিছু নামকরণের সমস্যার সমাধান করতে পারে না যা একটি সম্পর্কটিকে অতিক্রম করতে চলেছে - আমি হয় খুব অস্পষ্ট বা খুব সাধারণ কিছু হতে পারি, যদি আমি না থাকতাম তবে এ থেকে বেরিয়ে আসার উপায় দেখি না আরও অন্তর্দৃষ্টি থাকার আরও অন্তর্দৃষ্টি।
djechlin

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

@ ডিজেচলিন আমি ব্যক্তিগতভাবে কোডটি দিয়ে কাজ করা সবচেয়ে সহজ খুঁজে পেয়েছি যা আমি বুঝতে পারি যাতে আমি কেবল উঁকি দিতে পারি। এটি হ'ল নামগুলি আমাকে জানায় আমি কী নিয়ে কাজ করছি। কোনও systemControllerবিস্তৃত শ্রেণিবিন্যাসে একটি বিমূর্ত বেস শ্রেণি বা পাতাগুলি কিনা তা জানা দরকার । অবশ্যই এটি আইডিই দিয়ে প্রতিকার করা যেতে পারে (যেহেতু বেশিরভাগ জাভা বিকাশের ক্ষেত্রে আমার ধারণা?) যা ব্যবহারকারীকে ক্লাসের বিষয়বস্তু এবং কাঠামো সম্পর্কে অবিলম্বে অবহিত করতে পারে তাই প্রকৃতপক্ষে অন্তর্দৃষ্টিপূর্ণ নামগুলি একই শিরাতে ন্যায়সঙ্গত হতে পারে না।
zxcdw
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.