নামকরণের ক্লাসগুলি - কীভাবে সবকিছুকে "<WhatEver> পরিচালক" বলা এড়ানো যায়? [বন্ধ]


1188

অনেক দিন আগে আমি একটি নিবন্ধ পড়েছি (আমি একটি ব্লগ এন্ট্রি বিশ্বাস করি) যা আমাকে নামকরণের বিষয়গুলিতে "ডান" ট্র্যাকটিতে রেখেছিল: আপনার প্রোগ্রামে জিনিসগুলির নামকরণ সম্পর্কে খুব বিচক্ষণ হতে হবে Be

উদাহরণস্বরূপ যদি আমার অ্যাপ্লিকেশনটি (একটি সাধারণ ব্যবসায়িক অ্যাপ্লিকেশন হিসাবে) হ্যান্ডলিং ব্যবহারকারী, সংস্থাগুলি এবং ঠিকানাগুলি ছিল আমার কাছে একটি User, একটি Companyএবং একটি Addressডোমেন শ্রেণি ছিল - এবং সম্ভবত কোথাও একটি UserManager, ক CompanyManagerএবং AddressManagerএগুলি পপ আপ করে যা এই জিনিসগুলি পরিচালনা করে।

সুতরাং আপনি কি ঐ বলতে পারেন UserManager, CompanyManagerএবং AddressManagerনা? না, কারণ ম্যানেজার একটি খুব জেনেরিক পদ যা আপনার ডোমেন অবজেক্টগুলির সাথে আপনি যে কোনও কিছু করতে পারেন তার সাথে ফিট করে।

আমি যে নিবন্ধটি পড়েছি তা খুব নির্দিষ্ট নাম ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। যদি এটি একটি সি ++ অ্যাপ্লিকেশন UserManagerহত এবং এর কাজটি ব্যবহারকারীদের বরাদ্দ এবং গাদা থেকে মুক্ত করছিল এটি ব্যবহারকারীদের পরিচালনা করতে পারে না তবে তাদের জন্ম ও মৃত্যুকে রক্ষা করে। হুম, সম্ভবত আমরা এটিকে ডাকতে পারি UserShepherd

অথবা সম্ভবত এই UserManagerকাজটি হ'ল প্রতিটি ব্যবহারকারীর অবজেক্টের ডেটা পরীক্ষা করা এবং ক্রিপ্টোগ্রাফিকভাবে ডেটাতে স্বাক্ষর করা। তারপর আমরা একটি ছিল UserRecordsClerk

এই ধারণাটি আমার সাথে আটকে গিয়ে আমি এটি প্রয়োগ করার চেষ্টা করি। এবং এই সহজ ধারণাটি আশ্চর্যজনকভাবে সন্ধান করুন।

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

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

  • কারখানা - অন্যান্য বস্তু তৈরি করে (নকশার ধরণ থেকে নেওয়া নামকরণ)
  • রাখাল - একজন রাখাল বস্তুর আজীবন, তাদের তৈরি এবং শাটডাউন পরিচালনা করে
  • সিঙ্ক্রোনাইজার - দুই বা ততোধিক অবজেক্টের মধ্যে ডেটা অনুলিপি করে (বা বস্তুর শ্রেণিবিন্যাস)
  • ন্যানি - তৈরির পরে অবজেক্টগুলিকে "ব্যবহারযোগ্য" অবস্থায় পৌঁছাতে সহায়তা করে - উদাহরণস্বরূপ অন্যান্য বস্তুর ওয়্যারিং করে

  • ইত্যাদি ইত্যাদি

সুতরাং, আপনি কীভাবে এই সমস্যাটি পরিচালনা করবেন? আপনার কি স্থির শব্দভাণ্ডার রয়েছে, আপনি উড়তে নতুন নাম উদ্ভাবন করেন বা আপনি নামকরণকে অত-গুরুত্বপূর্ণ বা ভুল না বিবেচনা করেন?

PS: আমি ইস্যুটি নিয়ে আলোচনা করা নিবন্ধ এবং ব্লগগুলির লিঙ্কগুলিতেও আগ্রহী। শুরু হিসাবে, এখানে মূল নিবন্ধটি আমাকে এটি সম্পর্কে চিন্তাভাবনা করেছে: 'ম্যানেজার' ছাড়াই জাভা ক্লাসের নামকরণ


আপডেট: উত্তরের সংক্ষিপ্তসার

এর মধ্যে আমি এই প্রশ্নটি থেকে কী শিখেছি তার একটি সামান্য সংক্ষিপ্তসার এখানে দেওয়া হল।

  • নতুন রূপক (Nanny) তৈরি না করার চেষ্টা করুন
  • অন্যান্য ফ্রেমওয়ার্কগুলি কী করে তা একবার দেখুন

এই বিষয়ে আরও নিবন্ধ / বই:

এবং উত্তরগুলি থেকে আমি সংগ্রহ করা নামের উপসর্গ / প্রত্যয়গুলির বর্তমান তালিকা:

  • সমন্বয়কারী
  • নির্মাতা
  • লেখক
  • পাঠক
  • ক্রীড়াশিক্ষক
  • আধার
  • প্রোটোকল
  • লক্ষ্য
  • পরিবর্তক
  • নিয়ামক
  • দৃশ্য
  • কারখানা
  • সত্তা
  • বালতি

এবং রাস্তার জন্য একটি ভাল টিপ:

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


11
এটি সম্প্রদায় উইকিতে অন্তর্ভুক্ত কারণ কোনও "সেরা" উত্তর নেই। এটি একটি আলোচনা।
ডক

13
এটা পাল্টা স্বজ্ঞাত। তাদের কি এটিকে ফোরাম বলা উচিত নয়? আমি মনে করি একটি উইকি মতামত নয়, তথ্য সংগ্রহের জন্য হবে।
অ্যারোনএলএস

78
এটি আপডেট করার জন্য ধন্যবাদ - তবে ও, শেষ টিপটি হ'ল ভয়ঙ্কর পরামর্শ! যদি আপনি 10 মিনিটে কোনও ভাল নামটি ভাবতে না পারেন তবে আপনার শ্রেণিতে সম্ভবত কিছু ভুল আছে। (স্ট্যান্ডার্ড ক্যাভেটস সহ: 1) নিখুঁত হ'ল শত্রু, ২) শিপিং একটি বৈশিষ্ট্য - কেবল মনে রাখবেন যে আপনি প্রযুক্তিগত debt
ণ নিচ্ছেন

11
যদি আপনি 10 মিনিটের মধ্যে কোনও ভাল নাম চিন্তা করতে না পারেন তবে আপনার সহকর্মীকে সাহায্যের জন্য জিজ্ঞাসা করুন। শুধু হাল ছেড়ে দেবেন না।

9
যদি আপনি 10 মিনিটের মধ্যে কোনও ভাল নাম চিন্তা করতে না পারেন তবে এটি আপনার সহকর্মীদের কাছে ব্যাখ্যা করার চেষ্টা করুন; তারা একটি ভাল নাম (ব্যবহারকারীর 338195) ভাবতে পারে তবে এটি ব্যাখ্যা করার চেষ্টা করলে সম্ভবত এটির ( জেফ ) কী হয়েছে তা আবিষ্কার করতে আপনাকে সহায়তা করবে ।
উইলসি

উত্তর:


204

আমি অনুরূপ একটি প্রশ্ন জিজ্ঞাসা করেছি , তবে যেখানে সম্ভব আমি ইতিমধ্যে .NET কাঠামোর নামগুলি অনুলিপি করার চেষ্টা করব এবং আমি জাভা এবং অ্যান্ড্রয়েড ফ্রেমওয়ার্কগুলিতে আইডিয়া সন্ধান করব ।

দেখে মনে হয় Helper, Managerএবং Utilএমন কোনও ক্লাসের সমন্বয় করার জন্য যেগুলি অনিবার্যভাবে বিশেষভাবে সংযুক্ত করা হয় যা কোনও রাষ্ট্র থাকে না এবং সাধারণত পদ্ধতিগত এবং স্থির হয়। একটি বিকল্প হয় Coordinator

আপনি নামের সাথে বিশেষ করে রক্তবর্ণ prosey পেতে এবং মতো জিনিসগুলির জন্য যেতে পারে Minder, Overseer, Supervisor, Administrator, এবং Master, কিন্তু আমি আগেই বলেছি আমি এটা ফ্রেমওয়ার্ক নাম যা আপনি ব্যবহার করছি মত পালন পছন্দ।


কিছু অন্যান্য সাধারণ প্রত্যয় (যদি এটি সঠিক শব্দটি হয়) আপনি। নেট কাঠামোর মধ্যেও খুঁজে পান :

  • Builder
  • Writer
  • Reader
  • Handler
  • Container

4
আমি এই অনেক পছন্দ। তারা খারাপ বা অজানা রূপকের জালে পড়ে না কারণ তারা ইতিমধ্যে .NET ফ্রেমওয়ার্কের দ্বারা ব্যবহৃত। অন্যান্য লাইব্রেরিগুলিতে (জাভা) সন্ধান করা আকর্ষণীয় হতে পারে, সাধারণত যা ব্যবহৃত হয় তার আরও ইনপুটের জন্য।
froh42

আমি Conductorকোনও সংগীত বাদ্যযন্ত্রের কন্ডাক্টরের মতো পরামর্শ দিতে চাই । আপনার "আচার" করা দরকার এমন সহযোগিতার প্রকৃতির উপর নির্ভর করে এটি অবশ্যই একটি গুরুত্বপূর্ণ ভূমিকা (অন্যান্য বিষয়গুলি অত্যন্ত বিশেষজ্ঞ অভিনেতা হওয়া উচিত যা কেন্দ্রিয়ায়িত কমান্ডের প্রতিক্রিয়া জানানো উচিত এবং প্রতিটি অন্যান্য সহযোগী সম্পর্কে খুব বেশি চিন্তা করবেন না)।
হেলটনবাইকার

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

115

আপনি সোর্স-কোড- ওয়ার্ডেল.ডে একবার দেখে নিতে পারেন , আমি সেখানে .NET ফ্রেমওয়ার্ক এবং অন্যান্য কিছু লাইব্রেরির শ্রেণীর নামের সর্বাধিক ব্যবহৃত ব্যবহৃত প্রত্যয় বিশ্লেষণ করেছি।

শীর্ষ 20 টি হ'ল:

  • গুণ
  • আদর্শ
  • সাহায্যকারী
  • সংগ্রহ
  • পরিবর্তক
  • ক্রীড়াশিক্ষক
  • তথ্য
  • প্রদানকারী
  • ব্যতিক্রম
  • সেবা
  • উপাদান
  • ব্যবস্থাপক
  • নোড
  • পছন্দ
  • কারখানা
  • প্রসঙ্গ
  • পদ
  • নকশাকার
  • ভিত্তি
  • সম্পাদক

147
একটি বিশেষ সংস্থায় অনেক আগে, আমি একজন ইঞ্জিনিয়ারকে জানতাম যে এই সংস্থাটি দুর্নীতির সাথে প্রত্যাহার বিধিমালার বেহাল ও বর্ধমান আধিক্যে এতটাই বিরক্ত হয়ে গেছে যে সে প্রতি ক্লাসকে অবজ্ঞাপূর্ণভাবে শেষ করেছিল Thingy

8
নামগুলির এই তালিকাটি নিজের প্রত্যয়টি প্রয়োগ করা উচিত তার প্রেক্ষাপট ছাড়া এতো কার্যকর নয়।
ফ্রেড

65

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

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

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


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

1
'বুদ্ধিমান' নামগুলি এড়ানোর জন্য +1। আমি মনে করি আপনি যেমন হতে পারেন ভাষার সাথে সরাসরি থাকতে পেরে দুর্দান্ত। (অবশ্যই, এটি একইসাথে সরাসরি, সংক্ষিপ্ত, নির্ভুল এবং দ্ব্যর্থহীন হওয়া সবসময় সহজ নয় ...)
অ্যান্ড্রুফ

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

51

আমরা কোনো ছাড়া কাজ করতে পারে xxxFactory, xxxManagerবা xxxRepositoryশ্রেণীর যদি আমরা বাস্তব জগতে সঠিকভাবে অনুকরণে:

Universe.Instance.Galaxies["Milky Way"].SolarSystems["Sol"]
        .Planets["Earth"].Inhabitants.OfType<Human>().WorkingFor["Initech, USA"]
        .OfType<User>().CreateNew("John Doe");

;-)


11
কীভাবে আপনি সমান্তরাল মহাবিশ্ব এবং বিকল্প মাত্রা পাবেন?
টিস্টার

23
এটি সহজ: সর্বজ্ঞ .বিজ্ঞান। মাত্রা ["আমাদের"] Univers ইউনিভার্সগুলি ["আমাদের"] Gala গ্যালাক্সিগুলি ... ... ঠিক আছে ঠিক আছে আমি স্বীকার করছি এটির পুনঃসংশোধনের প্রয়োজন হবে। ;-)
হার্জমিস্টার

73
আপডেট: এটি .NET 4.0 Universe.Instance.ToParallel()
কনেল

2
যদিও ডিমেটারের আইন ভঙ্গ করে!
জোনাস জি ড্রেঞ্জ

13
এগুলি হ'ল অবজেক্ট এবং সদস্য, শ্রেণির নাম নয়
হ্যারি বেরি

39

এটি এমন কিছুতে পিচ্ছিল opeালের মতো মনে হয় যা ডেইলিওয়েটিএফ.কম, "ম্যানেজারঅফপিওপলওহোউইভমর্টেজেজ" ইত্যাদি পোস্ট করা উচিত d

আমি মনে করি এটি ঠিক আছে যে একটি একতাত্ত্বিক ব্যবস্থাপক শ্রেণি ভাল ডিজাইন নয়, তবে 'ম্যানেজার' ব্যবহার করা খারাপ নয়। ইউজারম্যানেজারের পরিবর্তে আমরা এটি ব্যবহারকারীর অ্যাকাউন্টম্যানেজার, ইউজারপ্রাইফাইলম্যানেজার, ইউজারসিকিউরিটি ম্যানেজার ইত্যাদিতে ভাঙতে পারি

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


8
ইউজারএকাউন্টার, ইউজারপ্রোফেলার এবং ইউজারসিকিউরার সম্পর্কে কী? আপনি যদি ম্যানেজার থেকে মুক্তি পান তবে আপনি নির্দিষ্ট সংজ্ঞাটি নিয়ে আসতে বাধ্য হবেন, যা আমি মনে করি এটি একটি ভাল জিনিস।
দিদিয়ার এ।

10
ইউজার অ্যাকাউন্টস, ইউজারপ্রোফাইল, ইউজারসিকিউরিটি ওও সম্পর্কে কী?
ক্লাইমে

3
আমি এটির নাম রাখব "মর্টেজঅউনারস ম্যানেজার"
ভোল্টার 9

কখনও কখনও ডোমেনটির নির্দিষ্ট নাম থাকে। "মর্টেজহোল্ডার" এর মতো এটি "মর্টেজওউনার" এর চেয়ে ভাল হতে পারে
বোরজব


24

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

তবে এমনকি সুনির্দিষ্ট ডিজাইন করা ক্লাসগুলি নিজের নাম দেয় না (সর্বদা) এবং আপনার পছন্দগুলি আংশিকভাবে নির্ভর করে আপনি ব্যবসায়িক মডেল শ্রেণি বা প্রযুক্তিগত অবকাঠামো শ্রেণি তৈরি করছেন কিনা তার উপর।

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

প্রযুক্তিগত অবকাঠামোগত ক্লাসগুলি কিছুটা সহজ, কারণ তারা ডোমেনগুলি বর্ণনা করে যা আমরা সত্যই জানি। আমি ক্লাসের নামগুলিতে নকশার প্যাটার্নের নামগুলি যুক্ত করতে পছন্দ করি, যেমন InsertUserCommand, CustomerRepository,বা SapAdapter.উদ্দেশ্যটির পরিবর্তে বাস্তবায়ন যোগাযোগের বিষয়ে উদ্বেগ বুঝতে পারি তবে নকশার ধরণগুলি ক্লাস ডিজাইনের এই দুটি দিককেই বিবাহ করে - আপনি যখন অবকাঠামো নিয়ে কাজ করছেন, যেখানে আপনি চান আপনি বিশদটি গোপন করার পরেও বাস্তবায়ন ডিজাইনটি স্বচ্ছ হতে হবে।


1
Policyব্যবসায়িক যুক্তিযুক্ত ক্লাসগুলির জন্য প্রত্যয়টি ব্যবহার করার ধারণাটি আমি সত্যিই পছন্দ করি
-15

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

10

জিওএফ বইয়ের দ্বারা নির্ধারিত (যেমন বলুন) দ্বারা সংজ্ঞায়িত নিদর্শনগুলির সাথে খুব ভাল হওয়া এবং এর পরেও বস্তুর নামকরণের ফলে ক্লাসের নামকরণ, সেগুলি সংগঠিত করা এবং উদ্দেশ্য সম্পর্কে যোগাযোগ করার ক্ষেত্রে আমার দীর্ঘ পথ হয় gets বেশিরভাগ লোকেরা এই নামকরণটি (বা এর অন্তত একটি বড় অংশ) বুঝতে পারবেন।


ফোলার আমার পক্ষে একটি ভাল রেফারেন্স তবে জিওএফ একটি দুর্দান্ত সুপারিশ।
লাজারাস

আমার অজ্ঞতা ক্ষমা করুন। আপনি কোন ফোলার বইয়ের কথা উল্লেখ করছেন?
ব্রায়ান অগ্নিউ


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

1
প্রযুক্তিগত অবকাঠামোগত ক্লাসগুলির জন্য, সাধারণত বাস্তবায়নটি স্বচ্ছ করে তোলা বাঞ্চনীয় - এবং প্রচলিত নকশার নকশার বেশিরভাগ নাম বাস্তবায়ন এবং অভিপ্রায় উভয়কেই যোগাযোগ করে। যদিও ডোমেন মডেল ক্লাসগুলি অন্য বিষয়।
জেফ স্টার্নাল

10

আমি যদি আমার ক্লাসের জন্য জাইজম্যানেজারের চেয়ে বেশি কংক্রিটের নামটি না নিয়ে আসতে পারি তবে এটি আমার পক্ষে পুনর্বিবেচনা করার বিষয় হবে যে এটি কি কার্যত কার্যকারিতা যা কোনও শ্রেণীর সাথে একত্রে সম্পর্কিত, অর্থাৎ কোনও স্থাপত্যের 'কোড গন্ধ' whether


8

আমি মনে করি সবচেয়ে গুরুত্বপূর্ণ জিনিসটি মনে রাখবেন: নামটি কি বর্ণনামূলক যথেষ্ট? নামটি দেখে ক্লাসটি করার কথা বলে কি বলতে পারেন? আপনার শ্রেণীর নামগুলিতে "ম্যানেজার", "পরিষেবা" বা "হ্যান্ডলার" এর মতো শব্দ ব্যবহার করা খুব জেনেরিক হিসাবে বিবেচিত হতে পারে, তবে যেহেতু প্রচুর প্রোগ্রামার সেগুলি ব্যবহার করে এটি ক্লাসটি কী তা বোঝার ক্ষেত্রেও সহায়তা করে।

আমি নিজেও প্রচুর মুখোমুখি প্যাটার্ন ব্যবহার করে আসছি (কমপক্ষে, আমি মনে করি এটাকেই বলা হয়)। আমার কাছে এমন একটি Userশ্রেণি থাকতে পারে যা কেবলমাত্র একজন ব্যবহারকারীর বর্ণনা দেয় এবং এমন একটি Usersশ্রেণি থাকতে পারে যা আমার "ব্যবহারকারীদের সংগ্রহ" ট্র্যাক করে। আমি ক্লাসটিকে একটি UserManagerবলি না কারণ আমি বাস্তব জীবনে পরিচালকদের পছন্দ করি না এবং আমি তাদের স্মরণ করিয়ে দিতে চাই না :) কেবল বহুবচন রূপটি আমাকে ক্লাসটি কী তা বুঝতে সাহায্য করে।


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

এই পদ্ধতির সাথে সমস্যাটি হ'ল আপনার কোডটি অনুসন্ধান করা সত্যিই শক্ত হয়ে যায় Users, বিশেষত যদি আপনি ম্যানেজারের অবজেক্টের পাশ দিয়ে যান। this.users = new Users()তবে তারপরে অবিচ্ছিন্নভাবে আপনার কোডের অন্য কোনও স্থানে এস এর usersঅ্যারে উল্লেখ করা হবে User
স্নোম্যান

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

5

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

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


3

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

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


1
তবুও, সামঞ্জস্যহীন যদি সামঞ্জস্যহীন কনভেনশন কেবল নিজের কনভেনশন শুরু করার চেয়ে ভাল। একটি প্রকল্পে কাজ করা লোকেরা যে কোনও সামঞ্জস্যপূর্ণ কনভেনশন খুব দ্রুত শিখবে এবং শীঘ্রই ভুলে যাবে যে কার্যকারিতাটি প্রথম নজরে আশা করা যায় এমনটি নয়।
মিঃ বয়

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

2

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

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

তথ্যের জন্য ডিজাইন প্যাটার্নসের মতো একটি বই দেখুন , এটি একটি দুর্দান্ত বই এবং আপনি নিজের কোডটির সাথে কোথায় অবস্থান করছেন তা পরিষ্কার করতে আপনাকে সহায়তা করতে পারে - যদি আপনি ইতিমধ্যে এটি ব্যবহার না করে থাকেন! ; O)

আমি এতক্ষণ ধরে বিবেচনা করি যেহেতু আপনার প্যাটার্নটি যথাযথভাবে চয়ন করা এবং যথাসম্ভব যথাযথভাবে ব্যবহার করা হয়েছে, তবে বেশ অবিস্মরণীয় সোজাসাপ্টা শ্রেণির নামগুলি যথেষ্ট হওয়া উচিত!


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