সি # শ্রেণির নামকরণের কনভেনশন: এটি বেসক্লাস বা ক্লাসবেস বা অ্যাবস্ট্রাক ক্লাস


117

বেস ক্লাস নামকরণের জন্য প্রস্তাবিত পদ্ধতির কী? এটি কি " বেস " বা " অ্যাবস্ট্রাক্ট " এর সাথে টাইপের নামের উপসর্গ করা হচ্ছে বা আমরা কেবল "বেস" দিয়ে এটি প্রত্যয় করব?

নিম্নোক্ত বিবেচনা কর:

প্রকার: ViewModelযেমন মেইনভিউমোডেল , রিপোর্টভিউমোডেল

বেস শ্রেণী: BaseViewModelবা ViewModelBaseবাAbstractViewModel

এছাড়াও বিবেচনা করুন:

টাইপ করুন: Productযেমন, VirtualProduct , ExpiringProduct

বেস শ্রেণী: BaseProductবা ProductBaseবাAbstractProduct

আপনি কোনটি বেশি মানসম্মত বলে মনে করেন?

class Entity : EntityBase
{
}

অথবা

class Entity : BaseEntity
{
}


উত্তর:


90

সেখানে বেজ প্রত্যয়, যেমন সঙ্গে ফ্রেমওয়ার্ক মধ্যে উদাহরণ System.Configuration.Provider.ProviderBase, System.Web.SessionState.SessionStateStoreProviderBase

তবে কোনওভাবেই ফ্রেমওয়ার্কের সমস্ত বিমূর্ত বেস ক্লাস এই সম্মেলনটি অনুসরণ করে না (যেমন System.Data.Common.DbParameter, System.Data.Common.DbCommand)।

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


" ক্লাসটি পাবলিক এপিআইতে ব্যবহারের উদ্দেশ্যে তৈরি করা হলে Avoidএকটি Baseপ্রত্যয় সহ বেস ক্লাসের নামকরণ ।" ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইনস, পৃষ্ঠা 174
ইউশা আলেয়াউব

47

উপরের কেউই না. আপনার বেস ক্লাসটি কী উদ্দেশ্যে সরবরাহ করে তা বিবেচনা করুন; নাম দিন উদাহরণস্বরূপ, অটোমোবাইল এবং সাইকেলের বেস ক্লাসটি যানবাহন হতে পারে।

যদি আপনি কেবল একটি শ্রেণির বেস ক্লাস রাখতে বেস ক্লাস তৈরি করে থাকেন এবং এর ব্যতীত অন্য কোনও উদ্দেশ্য বা কারণ ছাড়াই আপনি সম্ভবত কিছু ভুল করছেন।


15
এটি সর্বদা ক্ষেত্রে হয় না এবং ফ্রেমওয়ার্কে আপনি অনেক বেস * ক্লাস পাবেন। কালেকশনবেস, ডিকশনারিবেস .... ইত্যাদি
চাদ গ্রান্ট

1
ভাল পয়েন্ট সত্যিকারের বিশ্বের বস্তুগুলি নিদর্শনগুলিতে ঠিক ফিট হওয়া উচিত fit কমনের বিমূর্ততাটি যানবাহনের মতো হওয়া উচিত, নির্দিষ্টকরণগুলি পিছনে যেতে হবে তবে সঠিকও।
ruslander

45
"বেস" প্রত্যয় সহ .NET ফ্রেমওয়ার্কের কিছু ক্লাসের নাম সংস্করণ 1.0 এর আগে ছিল এবং মাইক্রোসফ্ট আর এই কনভেনশনগুলি অনুসরণ করে না .... তবে তারা এখন নাম পরিবর্তন করতে পারে না। মাইক্রোসফ্টের ফ্রেমওয়ার্ক ডিজাইন গাইডলাইনস বই, বিভাগ 6.2 (যা বেস ক্লাসগুলি কভার করে) বিশেষত "বেস" প্রত্যয় ব্যবহারের বিরুদ্ধে প্রস্তাব দেয়।
ওয়ারেন রুমাক

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

4
ওয়ারেন, মাইক্রোসফ্ট ফ্রেমওয়ার্ক ডিজাইন গাইডলাইনস বই হিসাবে উল্লেখ করেছেন, বেস ক্লাসে বিভাগ 6.2: এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms229003(v=vs.110).aspx তারা বেস প্রত্যয় এড়াতে বলে: "এভিআইডি নামকরণ "বেস" প্রত্যয় সহ বেস ক্লাসগুলি যদি ক্লাসটি জনসাধারণের APIs এ ব্যবহারের উদ্দেশ্যে করা হয়। "
cwills

5

আপনি যদি ভার্চুয়াল বেস ক্লাসগুলির কথা বলছেন, মাইক্রোসফ্টের স্ট্যান্ডার্ডটি ক্লাসনামবেস (কালেকশনবেস এর মতো))


3

আমি এটি পছন্দ করার বিষয় মনে করি। আমি বলব যদি আপনি প্রচুর বেস ক্লাস তৈরি করে থাকেন তবে বেসক্লাসনামের সাথে সর্বদা যাওয়াই ভাল কারণ আপনি কেবল বেস টাইপ করে এবং অন্যান্য সাহায্যের সাহায্য পেয়ে আপনি কোন বেস ক্লাস ব্যবহার করতে পারবেন তা সর্বদা জানতে পারবেন Intellisense। আপনার যদি 20 বেস ক্লাস থাকে এবং আপনি বেসকে প্রত্যয় হিসাবে যুক্ত করেছেন এবং আপনি ভুলে গেছেন বেস ক্লাসের নাম কি? আপনি কি ভিএস থেকে প্রথমে একটি ক্লাস ডায়াগ্রাম তৈরি করতে চান এবং কোন বেস ক্লাসগুলি উপলব্ধ তা জানতে চান? এটি কেবল এক বা দুটি ক্লাস হলে তাদের ক্লাসবেস নামকরণ ঠিক আছে।

গেটআইটেমস এবং আইটেমগেট ফাংশনের মধ্যে একই সিদ্ধান্ত নিতে পারে। আমি কমপক্ষে পঠনযোগ্যতার জন্য বলব - getItems এ যান। সম্মেলনগুলি অনুসরণ করুন :)


1
'বেস' ক্লাসগুলি ওও হ্যাক, পলের মন্তব্য দেখুন । এগুলি প্রায়শই সহায়ক এবং কখনও কখনও প্রয়োজনীয় হয় তবে তবুও তারা হ্যাক। আপনি যদি সমস্ত উপলব্ধ বেস ক্লাসগুলির সন্ধান করার প্রয়োজন বোধ করেন তবে তা কেন? তারা কী ভাগ করে নেয় যা তাদের সমস্তকে এক সাথে দেখার দরকার তৈরি করে? উত্তরটি আপনাকে আরও ভাল নামকরণে সহায়তা করতে পারে।
আয়ান

1
@ অভিষেক: এর উপমাটি কাজ GetItemsকরে না - "গেট" কেবল একটি ক্রিয়া এবং এটি কেবলমাত্র ইংরেজী ব্যাকরণগত বোধকে একটি উপসর্গ হিসাবে তৈরি করে, যেখানে "বেস" বিশেষণ (উপসর্গ) বা বিশেষ্য (প্রত্যয়) উভয় হিসাবে কাজ করে।
স্লিপ ডি থম্পসন 21

1
@ আইইন: যে কারণে লোকেরা ক্লাসের নামগুলিতে "বেস" ব্যবহার করে সমস্ত বেস ক্লাসগুলি সন্ধান করতে সক্ষম হয় না - যুক্তিটি বিপরীতটির কাছাকাছি। এটি এমন যে অনেকগুলি সম্পর্কিত ক্লাসের বেস ক্লাসটি তাদের থেকে আলাদা হয়ে যায়, "আই" উপসর্গটি বোঝায় যে ক্লাসগুলি এটি গ্রহণ করে এমন শ্রেণীর মধ্যে একটি ইন্টারফেসকে পৃথক করে। "বেস" উপসর্গ / প্রত্যয়টি বেশিরভাগ ক্ষেত্রেই দেখেছি যখন বেস ক্লাসটি নিজস্বভাবে অ-কার্যকরী হয় - উদ্দেশ্যপ্রণোদিত ব্যবহার দ্বারা বিমূর্ততা নির্বিশেষে, প্রয়োগ করা যাই হোক না কেন abstract
স্লিপ ডি থম্পসন 21

@ স্লিপডি.টমসন হ্যাঁ, 'সমস্ত ক্লাস সন্ধান করুন' অভিষেকের প্রতিক্রিয়া ছিল। আমি পৌলের উত্তরে উত্তর দিয়েছি।
আয়ান

2

আমরা বেসেনটিটি ব্যবহার করি, তবে আমি এটি নিজের পছন্দ বলে মনে করি। আমি ঘন ঘন অন্য দেখতে।

আপনার প্রসঙ্গে কেবল সামঞ্জস্য বজায় রাখুন, আপনার প্রকল্প, নামস্থান বা যদি সম্ভব হয় তবে আপনার দল। খারাপ কনভেনশন আইএমএইচওর চেয়ে বিভিন্ন কনভেনশন খারাপ worse


2

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


-1

বেসএন্টিটি দেখতে অনেকটা উটের মামলার মতো লাগে - strName, bseEntity। আমি প্রথমে বিষয়টিকে সংজ্ঞায়িত করায় এটিটিবেস-এর জন্য যাব, এটি আপনাকে এর কাজটি আরও দ্রুত চিহ্নিত করতে সহায়তা করবে।


10
আপনি হাঙ্গেরিয়ান স্বরলিপি সম্পর্কে কথা বলছেন, উটের আবরণ নয়। হাঙ্গেরিয়ান স্বরলিপিটি কেবলমাত্র উটের ক্ষেত্রে ব্যবহৃত হয়েছে, তবে তারা সম্পূর্ণ আলাদা জিনিস।
sliderhouserules

-5

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

সুতরাং, সাধারণভাবে ক্লাসনামবেস / সত্তাবেস আরও ভাল পছন্দ হবে।


9
অসম্মত; পঠনযোগ্যতার। আইটেমগেটের চেয়ে গেটআইটেমগুলি অনেক বেশি অর্থবোধ করে।
নাথান রিডলি

2
অসম্মতি ... উপরের মত একই কারণ .. তবে ভোট দিতে অক্ষম ... :(
মুগুন্থ

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