नामकरण कक्षाएं - कैसे सब कुछ एक "<WhatEver> प्रबंधक" कहने से बचें? [बन्द है]


1188

बहुत समय पहले मैंने एक लेख पढ़ा है (मुझे विश्वास है कि एक ब्लॉग प्रविष्टि) जो मुझे नामकरण की वस्तुओं पर "सही" ट्रैक पर रखती है: अपने कार्यक्रम में चीजों के नामकरण के बारे में बहुत ही सतर्क रहें।

उदाहरण के लिए यदि मेरा आवेदन उपयोगकर्ताओं (कंपनियों के लिए एक विशिष्ट ऐप के रूप में) था, तो उन उपयोगकर्ताओं, कंपनियों और पते को संभालने के लिए मेरे पास एक User, एक Companyऔर एक Addressडोमेन वर्ग होगा - और शायद कहीं एक UserManager, CompanyManagerऔर एक AddressManagerहै जो उन चीजों को संभालता है।

तो क्या आप बता सकते हैं कि वे क्या करते हैं UserManager, CompanyManagerऔर AddressManagerक्या करते हैं? नहीं, क्योंकि प्रबंधक एक बहुत ही सामान्य शब्द है जो आपके डोमेन ऑब्जेक्ट्स के साथ कुछ भी करने के लिए फिट बैठता है।

मैंने जो लेख पढ़ा वह बहुत विशिष्ट नामों का उपयोग करके अनुशंसित है। यदि यह C ++ एप्लिकेशन UserManagerथा और उपयोगकर्ताओं को आवंटित कर रहा था और उन्हें ढेर से मुक्त कर रहा था, तो यह उपयोगकर्ताओं को प्रबंधित नहीं करेगा बल्कि उनके जन्म और मृत्यु की रक्षा करेगा। हम्म, शायद हम इसे एक कह सकते हैं UserShepherd

या हो सकता है कि UserManagerप्रत्येक उपयोगकर्ता के डेटा के डेटा की जांच करना और क्रिप्टोग्राफिक रूप से डेटा पर हस्ताक्षर करना हो। तो हम एक होगा UserRecordsClerk

अब जब यह विचार मेरे साथ अटक गया है तो मैं इसे लागू करने का प्रयास करता हूं। और इस सरल विचार को आश्चर्यजनक रूप से कठिन लगता है।

मैं यह वर्णन कर सकता हूं कि कक्षाएं क्या करती हैं और (जब तक मैं त्वरित और गंदे कोडिंग में फिसल नहीं जाता हूं) जो कक्षाएं मैं लिखता हूं वह बिल्कुल एक काम करता है। मुझे उस विवरण से नामों तक जाने की याद आती है जो नामों की एक प्रकार की सूची है, एक शब्दावली जो अवधारणाओं को नामों में मैप करती है।

अंतत: मेरे दिमाग में पैटर्न कैटलॉग जैसा कुछ होना चाहिए (अक्सर डिजाइन पैटर्न आसानी से ऑब्जेक्ट नाम प्रदान करते हैं, उदाहरण के लिए एक कारखाना )

  • फैक्टरी - अन्य वस्तुओं को बनाता है (डिजाइन पैटर्न से लिया गया नामकरण)
  • शेफर्ड - एक चरवाहा वस्तुओं के जीवनकाल, उनके निर्माण और बंद को संभालता है
  • सिंक्रोनाइज़र - दो या अधिक वस्तुओं (या ऑब्जेक्ट पदानुक्रम) के बीच डेटा की प्रतिलिपि बनाता है
  • नानी - निर्माण के बाद वस्तुओं को "प्रयोग करने योग्य" स्थिति तक पहुंचने में मदद करती है - उदाहरण के लिए अन्य वस्तुओं के लिए वायरिंग द्वारा

  • आदि आदि।

तो, आप उस मुद्दे को कैसे संभालते हैं? क्या आपके पास एक निश्चित शब्दावली है, क्या आप मक्खी पर नए नामों का आविष्कार करते हैं या क्या आप नामकरण की चीजों को इतना महत्वपूर्ण या गलत नहीं मानते हैं?

पुनश्च: मैं इस मुद्दे पर चर्चा करने वाले लेखों और ब्लॉगों के लिंक में भी दिलचस्पी रखता हूं। एक शुरुआत के रूप में, यहाँ मूल लेख है जो मुझे इसके बारे में सोचने को मिला: जावा क्लासेस का नाम लिए बिना 'मैनेजर'


अपडेट: उत्तरों का सारांश

इस बीच मैंने इस प्रश्न से जो सीखा, उसका थोड़ा सारांश यहां दिया गया है।

  • नए रूपक बनाने की कोशिश नानी (नानी)
  • अन्य रूपरेखा क्या करते हैं, इस पर एक नज़र डालें

इस विषय पर आगे के लेख / पुस्तकें:

और नामों की एक वर्तमान सूची / उपसर्ग / प्रत्यय मैंने उत्तर से (विषयवार!) एकत्र किए:

  • समन्वयक
  • निर्माता
  • लेखक
  • पाठक
  • हैंडलर
  • पात्र
  • मसविदा बनाना
  • लक्ष्य
  • कनवर्टर
  • नियंत्रक
  • राय
  • फ़ैक्टरी
  • सत्ता
  • बाल्टी

और सड़क के लिए एक अच्छी टिप:

नामकरण पक्षाघात मत करो। हां, नाम बहुत महत्वपूर्ण हैं, लेकिन वे पर्याप्त महत्वपूर्ण नहीं हैं कि वे बड़ी मात्रा में समय बर्बाद करें। यदि आप 10 मिनट में एक अच्छा नाम नहीं सोच सकते हैं, तो आगे बढ़ें।


11
यह समुदाय के विकी के अंतर्गत आता है क्योंकि कोई भी "सर्वश्रेष्ठ" उत्तर नहीं है। इसकी चर्चा है।
डीओके

13
यह काउंटर सहज है। क्या उन्हें इसे मंच नहीं कहना चाहिए? मुझे लगता है कि विकी तथ्यों के संग्रह के लिए होगा, राय के लिए नहीं।
एरोनल्स 13

78
इस अद्यतन रखने के लिए धन्यवाद - लेकिन ऊ, कि आखिरी टिप भयानक सलाह है! यदि आप 10 मिनट में एक अच्छे नाम के बारे में नहीं सोच सकते हैं, तो शायद आपकी कक्षा में कुछ गड़बड़ है। (स्टैण्डर्ड कैविट्स के साथ: 1) परफेक्ट गुड का दुश्मन है, 2) शिपिंग एक विशेषता है - बस याद रखें कि आप तकनीकी ऋण में वृद्धि कर रहे हैं।)
जेफ सनातन

11
यदि आप 10 मिनट में एक अच्छा नाम नहीं सोच सकते हैं तो अपने सहयोगी से मदद के लिए पूछें। बस हार मत मानो।

9
यदि आप 10 मिनट में एक अच्छा नाम नहीं सोच सकते हैं, तो इसे अपने सहयोगियों को समझाने की कोशिश करें; वे एक अच्छे नाम (user338195) के बारे में सोच सकते हैं , लेकिन यह समझाने की कोशिश करने से आपको यह पता लगाने में मदद मिलेगी कि इसमें क्या गलत है ( जेफ )।
WillC

जवाबों:


204

मैंने एक समान प्रश्न पूछा , लेकिन जहां संभव हो मैं पहले से ही .NET फ्रेमवर्क में नामों को कॉपी करने की कोशिश करता हूं, और मैं जावा और एंड्रॉइड फ्रेमवर्क में विचारों की तलाश करता हूं ।

ऐसा लगता है Helper, Managerऔर Utilवे अनौपचारिक संज्ञाएं हैं जो आप उन समन्वय कक्षाओं के लिए देते हैं जिनमें कोई राज्य नहीं होता है और आमतौर पर प्रक्रियात्मक और स्थिर होते हैं। एक विकल्प है Coordinator

आप नाम के साथ विशेष रूप से बैंगनी prosey हो और जैसी चीजों के लिए जा सकते हैं Minder, Overseer, Supervisor, Administrator, और Master, लेकिन जैसा कि मैंने कहा कि मैं यह ढांचा नाम आपके लिए इस्तेमाल कर रहे हैं की तरह रखने पसंद करते हैं।


कुछ अन्य सामान्य प्रत्यय (यदि वह सही शब्द है) आप .NET फ्रेमवर्क में भी पाते हैं:

  • Builder
  • Writer
  • Reader
  • Handler
  • Container

4
मुझे ये बहुत पसंद हैं। वे खराब या अज्ञात रूपकों के जाल में नहीं पड़ते क्योंकि वे पहले से ही .NET फ्रेमवर्क द्वारा उपयोग में हैं। अन्य पुस्तकालयों (जावा) को देखना दिलचस्प हो सकता है, जो आमतौर पर उपयोग किए जाने वाले अधिक इनपुट के लिए भी हैं।
Fro4242

मैं Conductorएक संगीत आर्केस्ट्रा के संचालक की तरह सुझाव देना चाहूंगा। यह निश्चित रूप से एक महत्वपूर्ण भूमिका है, सहयोग की प्रकृति के आधार पर आपको "आचरण" करने की आवश्यकता है (अन्य वस्तुएं बहुत विशिष्ट अभिनेता हैं जो केंद्रीयकृत कमांड का जवाब देना चाहिए और हर दूसरे सहयोगी के बारे में बहुत ज्यादा चिंता नहीं करनी चाहिए)।
हेलटोनबीकर

1
मेरा मानना ​​है कि -er classes का समाधान अलग नाम के साथ आना है। जैसा कि मैंने कई अन्य पोस्टों में पढ़ा है और मैं उत्तर जानने की कोशिश कर रहा हूं, यह है कि आपको आर्किटेक्चर को बदलने की जरूरत है, न कि केवल उपयोग किए गए नाम की।
माइकल ओजेरानस्की

115

आप source-code-wordle.de पर एक नज़र डाल सकते हैं , मैंने वहां .NET फ्रेमवर्क और कुछ अन्य पुस्तकालयों के वर्ग नामों के सबसे अधिक बार उपयोग किए जाने वाले प्रत्ययों का विश्लेषण किया है।

शीर्ष 20 हैं:

  • गुण
  • प्रकार
  • सहायक
  • संग्रह
  • कनवर्टर
  • हैंडलर
  • जानकारी
  • प्रदाता
  • अपवाद
  • सर्विस
  • तत्त्व
  • प्रबंधक
  • नोड
  • विकल्प
  • फ़ैक्टरी
  • प्रसंग
  • मद
  • डिजाइनर
  • आधार
  • संपादक

147
एक विशेष कंपनी में बहुत पहले से, मुझे पता था कि एक इंजीनियर कंपनी के बेतुके और बढ़ते ढेरों नियमों से तंग आ चुका था और कंपनी के बारे में सोचता था कि वह हर वर्ग के साथ भेदभाव करता है Thingy

8
स्वयं के नाम की यह सूची इतनी उपयोगी नहीं है कि किस संदर्भ में प्रत्यय लागू किया जाए।
फ्रेड

65

मैं सभी अच्छे नामों के लिए हूं, और मैं अक्सर चीजों के लिए नाम चुनते समय बहुत सावधानी बरतने के महत्व के बारे में लिखता हूं। इसी कारण से, मैं चीजों का नामकरण करते समय रूपकों से सावधान हूं। मूल प्रश्न में, "फैक्टरी" और "सिंक्रनाइज़र" अच्छे नामों की तरह दिखते हैं, जो उन्हें लगता है। हालांकि, "चरवाहा" और "नानी" नहीं हैं, क्योंकि वे रूपकों पर आधारित हैं । आपके कोड में एक वर्ग शाब्दिक रूप से नानी नहीं हो सकता है ; आप इसे एक नानी कहते हैं क्योंकि यह कुछ अन्य चीजों के बाद बहुत पसंद है जैसे कि एक वास्तविक जीवन में नानी शिशुओं या बच्चों की देखभाल करती है। यह अनौपचारिक भाषण में ठीक है, लेकिन कोड में नामकरण कक्षाओं के लिए ठीक नहीं है (मेरी राय में) जो कि कौन जानता है कि कौन जानता है, द्वारा बनाए रखा जाएगा।

क्यों? क्योंकि रूपक संस्कृति पर निर्भर होते हैं और अक्सर व्यक्तिगत निर्भर भी होते हैं। आपके लिए, "नानी" एक वर्ग का नामकरण बहुत स्पष्ट हो सकता है, लेकिन शायद यह किसी और के लिए स्पष्ट नहीं है। हमें उस पर भरोसा नहीं करना चाहिए, जब तक आप कोड नहीं लिख रहे हैं जो केवल व्यक्तिगत उपयोग के लिए है।

किसी भी मामले में, सम्मेलन एक रूपक बना या तोड़ सकता है। "फ़ैक्टरी" का उपयोग स्वयं एक रूपक पर आधारित है, लेकिन एक है जो लगभग थोड़ी देर के लिए रहा है और वर्तमान में प्रोग्रामिंग दुनिया में काफी प्रसिद्ध है, इसलिए मैं कहूंगा कि इसका उपयोग करना सुरक्षित है। हालांकि, "नानी" और "चरवाहा" अस्वीकार्य हैं।


10
यह तर्क वास्तव में टूट जाता है कि जाहिर तौर पर फैक्ट्री एक रूपक है। अक्सर रूपकों को वास्तव में स्पष्ट हो जाएगा कि कोई वस्तु क्या अच्छी हो सकती है, जबकि अस्पष्ट या सामान्य होने के नाते स्वचालित रूप से यह सुनिश्चित करता है कि कोड क्या करता है यह जानने का एकमात्र तरीका पूरी तरह से पढ़कर है! सबसे खराब स्थिति।
क्ज़कई

1
'प्यारा' नामों से बचने के लिए +1। मुझे लगता है कि भाषा के साथ प्रत्यक्ष होना बहुत अच्छा है क्योंकि आप हो सकते हैं। (बेशक, यह हमेशा एक ही समय में प्रत्यक्ष, रसीला, सटीक और असंदिग्ध होना आसान नहीं है ...)
andrewf

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
आप समानांतर ब्रह्मांडों और वैकल्पिक आयामों को कैसे प्राप्त करेंगे?
tster

23
यह आसान है: Omniverse.Instance.Dimensions ["हमारा"]। यूनिवर्स ["हमारा"]। आकाशगंगाएं ... ... ठीक है ठीक है मैं मानता हूं कि इसके लिए पुनर्मिलन की आवश्यकता होगी। ;-)
हर्जमेइस्टर

73
अपडेट: : इस .NET 4.0 में जोड़ा गया है Universe.Instance.ToParallel());
Connell

2
हालांकि लोकतंत्र के कानून को तोड़ता है!
जोनास जी।

13
वे ऑब्जेक्ट्स और मेंबर हैं, क्लास के नाम नहीं
हैरी बेरी

39

ऐसा लगता है कि thedailywtf.com, "ManagerOfPeopleWhoHaveMortgages", आदि पर पोस्ट की जाने वाली किसी फिसलन ढलान की तरह।

मुझे लगता है कि यह सही है कि एक अखंड प्रबंधक वर्ग अच्छा डिज़ाइन नहीं है, लेकिन 'प्रबंधक' का उपयोग करना बुरा नहीं है। UserManager के बजाय हम इसे नीचे तोड़ सकते हैं UserAccountManager, UserProfileManager, UserSecurityagerager इत्यादि के लिए।

'प्रबंधक' एक अच्छा शब्द है क्योंकि यह स्पष्ट रूप से दिखाता है कि एक वर्ग वास्तविक दुनिया की 'चीज़' का प्रतिनिधित्व नहीं कर रहा है। 'अकाउंटस्क्लेर' - अगर मैं यह बताऊं कि अगर यह एक वर्ग है जो उपयोगकर्ता डेटा का प्रबंधन करता है, या किसी ऐसे व्यक्ति का प्रतिनिधित्व करता है जो अपनी नौकरी के लिए खाता क्लर्क है?


8
UserAccounter, UserProfiler और UserSecurer के बारे में क्या? यदि आप प्रबंधक से छुटकारा पा लेते हैं, तो आपको विशिष्ट परिभाषा के साथ आने के लिए मजबूर किया जाता है, जो मुझे लगता है कि अच्छी बात है।
डिडियर ए।

10
UserAccount, UserProfile, UserSecurity oO के बारे में क्या?
क्लेम

3
मैं इसका नाम "मोर्टेजऑवर्स मैनजर"
रख दूंगा

कभी-कभी डोमेन के विशिष्ट नाम होते हैं। "मोर्टेजहॉल्डर" की तरह जो बेहतर हो सकता है कि "मोर्टेजऑनर"
बोरबज़


24

जब मैं अपने आप को उपयोग करने के बारे में सोच रहा हूं Managerया Helperएक कक्षा के नाम पर, मैं इसे एक कोड गंध मानता हूं जिसका मतलब है कि मुझे अभी तक सही अमूर्तता नहीं मिली है और / या मैं एकल जिम्मेदारी सिद्धांत का उल्लंघन कर रहा हूं , इसलिए डिजाइन में अधिक प्रयास करना और फिर से प्रयास करना अक्सर नामकरण को बहुत आसान बना देता है।

लेकिन यहां तक ​​कि अच्छी तरह से डिजाइन की गई कक्षाएं (हमेशा) खुद को नाम नहीं देती हैं, और आपकी पसंद आंशिक रूप से इस बात पर निर्भर करती है कि आप व्यवसाय मॉडल वर्ग या तकनीकी बुनियादी ढांचा वर्ग बना रहे हैं या नहीं।

व्यवसाय मॉडल कक्षाएं कठिन हो सकती हैं, क्योंकि वे हर डोमेन के लिए अलग हैं। कुछ शर्तें हैं जिनका मैं बहुत उपयोग करता हूं, जैसे Policyकि डोमेन (उदाहरण के लिए) में रणनीति कक्षाओं के लिए LateRentalPolicy, लेकिन ये आमतौर पर एक " सर्वव्यापी भाषा " बनाने की कोशिश से बहते हैं जिसे आप व्यावसायिक उपयोगकर्ताओं के साथ साझा कर सकते हैं, डिजाइनिंग और नामकरण कक्षाएं इसलिए वे वास्तविक रूप से मॉडल करते हैं -हमारे विचारों, वस्तुओं, कार्यों और घटनाओं।

तकनीकी बुनियादी ढांचे की कक्षाएं थोड़ी आसान हैं, क्योंकि वे उन डोमेन का वर्णन करते हैं जिन्हें हम वास्तव में अच्छी तरह से जानते हैं। मैं डिजाइन नामों को वर्ग नामों में शामिल करना पसंद करता हूं, जैसे InsertUserCommand, CustomerRepository,या SapAdapter.मैं इरादे के बजाय कार्यान्वयन को संप्रेषित करने की चिंता को समझता हूं, लेकिन डिजाइन पैटर्न वर्ग डिजाइन के इन दो पहलुओं से शादी करते हैं - कम से कम जब आप बुनियादी ढांचे के साथ काम कर रहे हों, जहां आप चाहते हैं कार्यान्वयन डिजाइन पारदर्शी होने के बावजूद भी आप विवरण छिपा रहे हैं।


1
मैं वास्तव में उपयोग करने का विचार की तरह Policyव्यापार तर्क युक्त कक्षाओं के लिए प्रत्यय
jtate

+1 "प्रबंधक" और "हेल्पर" जैसे नामों से संबंधित कोड गंध का उल्लेख करने के लिए। मुझे लगता है कि अगर मेरे पास चीजों के लिए कोई स्पष्ट नाम नहीं है, तो यह आमतौर पर डोमेन के बारे में मेरी समझ में कम से कम कुछ अंश से उपजा है, चाहे वह व्यवसाय हो या तकनीकी। लगभग समान रूप से, इसका मतलब यह हो सकता है कि मैं सिर्फ कक्षाओं को तोड़ रहा हूं क्योंकि वे "बहुत बड़े हो गए" - जो मेरे लिए भी अपर्याप्त मॉडलिंग का संकेत है। यह शीर्ष मतदान का जवाब होना चाहिए।
nclark

10

GOF पुस्तक के अनुसार पैटर्न के साथ au fait होने के नाते , और इसके बाद वस्तुओं का नामकरण मुझे वर्गों के नामकरण, उन्हें व्यवस्थित करने और इरादे को संप्रेषित करने में एक लंबा रास्ता तय करता है। ज्यादातर लोग इस नामकरण (या कम से कम इसका एक प्रमुख हिस्सा) को समझेंगे।


फाउलर मेरे लिए एक अच्छा संदर्भ है लेकिन GOF एक बड़ी सिफारिश है।
लाजर

मेरी अज्ञानता को क्षमा करें। आप किस फाउलर पुस्तक का उल्लेख कर रहे हैं?
ब्रायन एग्न्यू


19
हम्म, कभी-कभी यह काम करता है (उदाहरण के लिए एक कारखाने या एक रणनीति की तरह) लेकिन दूसरे समय में मुझे लगता है कि यह कार्यान्वयन का तरीका बताता है (मैंने एक पैटर्न का उपयोग किया है!) वर्ग की मंशा और नौकरी से अधिक। उदाहरण के लिए एक सिंगलटन की सबसे महत्वपूर्ण बात यह है कि यह क्या दर्शाता है - और यह नहीं कि यह एक सिंगलटन है। इसलिए उपयोग किए गए पैटर्न के बाद सख्त नामकरण का उपयोग किए गए प्रकारों के बाद सख्त नामकरण की तरह लगता है। उदाहरण के लिए, हंगेरियन नोटेशन को विंडोज सिस्टम समूह द्वारा गलत तरीके से लागू किया गया ("आशय प्रकार" के बजाय C डेटा प्रकार का वर्णन करते हुए)
froh42

1
तकनीकी अवसंरचना वर्गों के लिए, यह आमतौर पर कार्यान्वयन को पारदर्शी बनाने के लिए वांछनीय है - और अधिकांश विहित डिजाइन पैटर्न नाम कार्यान्वयन और इरादे दोनों को संवाद करते हैं। डोमेन मॉडल कक्षाएं एक और मामला है, हालांकि।
जेफ सनातन

10

अगर मैं XyzManager की तुलना में अपनी कक्षा के लिए अधिक ठोस नाम के साथ नहीं आ सकता हूं, तो मेरे लिए इस पर पुनर्विचार करने का एक बिंदु होगा कि क्या यह वास्तव में कार्यक्षमता है जो एक वर्ग में एक साथ है, अर्थात एक 'आर्किटेक्चर कोड गंध'।


8

मुझे लगता है कि ध्यान रखने वाली सबसे महत्वपूर्ण बात यह है: क्या नाम वर्णनात्मक पर्याप्त है? क्या आप नाम देखकर बता सकते हैं कि कक्षा क्या करने वाली है? अपने वर्ग के नामों में "प्रबंधक", "सेवा" या "हैंडलर" जैसे शब्दों का उपयोग करना बहुत ही सामान्य माना जा सकता है, लेकिन चूंकि बहुत सारे प्रोग्रामर उनका उपयोग करते हैं इसलिए यह समझने में भी मदद करता है कि वर्ग क्या है।

मैं खुद से मुखौटा-पैटर्न का उपयोग कर रहा हूं (कम से कम, मुझे लगता है कि यही कहा जाता है)। मेरे पास एक Userवर्ग हो सकता है जो केवल एक उपयोगकर्ता का वर्णन करता है, और एक Usersवर्ग जो मेरे "उपयोगकर्ताओं के संग्रह" का ट्रैक रखता है। मैं कक्षा को कॉल नहीं करता UserManagerक्योंकि मुझे वास्तविक जीवन में प्रबंधक पसंद नहीं हैं और मैं उन्हें याद नहीं करना चाहता हूँ :) बस बहुवचन रूप का उपयोग करने से मुझे यह समझने में मदद मिलती है कि कक्षा क्या करती है।


मुझे वास्तव में यह दृष्टिकोण पसंद है क्योंकि यह वस्तुओं के शीर्ष डाउन प्रबंधन के विचार को आसान बनाता है। उपयोगकर्ताओं के एक समूह के लिए उपयोगकर्ता प्रबंधक के बजाय उपयोगकर्ताओं के बीच काम करने की संभावना अधिक है। इसके अलावा, उपयोगकर्ता के पास एक उपयोगकर्ता का संदर्भ होने के कारण उपयोगकर्ता प्रबंधक के रूप में अजीब नहीं लगता है। यह ओओपी कड़ाई के बजाय सापेक्ष सोच के लिए अधिक खुला है।
सिपाही रीड

इस दृष्टिकोण के साथ समस्या यह है कि वास्तव में आपके कोड को खोजना मुश्किल हो जाता है Users, खासकर यदि आप प्रबंधक ऑब्जेक्ट के आसपास से गुजरते हैं। this.users = new Users()लेकिन तब शायद आपके कोड में कहीं और एस के usersएक सरणी को संदर्भित करेगा User
स्नोमैन

जैसा कि आप कहते हैं कि उपयोगकर्ताओं का तात्पर्य "उपयोगकर्ताओं का संग्रह" है - ऐसी संस्थाओं का संग्रह जो राज्यवार हों। लेकिन SRP का मतलब है कि आप उपयोगकर्ता डेटा (स्थिति) के साथ उपयोगकर्ता प्रबंधन (कार्यक्षमता और व्यावसायिक तर्क) को बंडल नहीं करना चाहेंगे। यह कहते हुए कि आप गलत हैं, बस यह कि UserManager उपयुक्त है यदि वर्ग उपयोगकर्ताओं को प्रबंधित करने के लिए ज़िम्मेदार है और न केवल उनके राज्य और बुनियादी CRUD को संग्रहीत कर रहा है।
रिचर्ड मूर

5

सी # के लिए विशिष्ट, मैंने पाया "फ्रेमवर्क डिज़ाइन दिशानिर्देश: कन्वेंशन, मुहावरे, और पुन: प्रयोज्य .NET लाइब्रेरीज़ के लिए पैटर्न" नामकरण के तर्क पर बहुत सारी अच्छी जानकारी है।

जहाँ तक उन अधिक विशिष्ट शब्दों को खोजने का सवाल है, मैं अक्सर एक थिसॉरस का उपयोग करता हूं और संबंधित शब्दों के माध्यम से कूदता हूं और एक अच्छा प्रयास करता हूं। मैं इसके साथ ज्यादा समय नहीं बिताने की कोशिश करता हूं, क्योंकि विकास के दौरान मैं बेहतर नामों के साथ आता हूं, या कभी-कभी महसूस करता हूं कि SuchAndSuchManagerवास्तव में कई वर्गों में टूट जाना चाहिए, और फिर उस पदावनत वर्ग का नाम एक गैर-मुद्दा बन जाता है। ।


3

मेरा मानना ​​है कि यहां महत्वपूर्ण बात यह है कि आपके कोड की दृश्यता के अनुरूप होना चाहिए, यानी जब तक आपके कोड को देखने / काम करने वाले सभी लोगों को आपके नामकरण सम्मेलन को समझना होगा, तब तक यह ठीक होना चाहिए, भले ही आप उन्हें कॉल करने का निर्णय लें 'CompanyThingamabob' और 'UserDoohickey'। पहला पड़ाव, यदि आप किसी कंपनी के लिए काम करते हैं, तो यह देखना है कि नामकरण के लिए कंपनी का सम्मेलन है या नहीं। यदि कोई कंपनी के लिए काम नहीं करता है या आप काम नहीं करते हैं, तो अपनी शर्तों का उपयोग करके अपनी खुद की रचना करें, इसे कुछ विश्वसनीय सहयोगियों / दोस्तों के आसपास से गुजारें, जो कम से कम लापरवाही से कोड करते हैं, और किसी भी प्रतिक्रिया को शामिल करते हैं जो समझ में आता है।

किसी और के अधिवेशन को लागू करना, तब भी जब इसे व्यापक रूप से स्वीकार किया जाता है, अगर यह पृष्ठ पर छलांग नहीं लगाता है तो मेरी पुस्तक में एक गलती है। सबसे पहले और सबसे महत्वपूर्ण बात यह है कि मुझे अपने कोड को अन्य दस्तावेज़ीकरण के संदर्भ के बिना समझने की आवश्यकता है, लेकिन साथ ही यह पर्याप्त रूप से सामान्य होने की आवश्यकता है कि यह उसी उद्योग में किसी अन्य क्षेत्र में किसी और के लिए समझ से बाहर नहीं है।


1
फिर भी, एक सुसंगत अगर थोड़ा अनजाना सम्मेलन सिर्फ अपने स्वयं के सम्मेलन शुरू करने से बेहतर है। किसी प्रोजेक्ट पर काम करने वाले लोग किसी भी निरंतर सम्मेलन को बहुत तेज़ी से सीखेंगे और जल्द ही भूल जाएंगे कि कार्यक्षमता पहली नज़र में अपेक्षित नहीं है।
श्री लड़का

@ जॉन, यही मैंने कहा है। सम्मेलन को समूह द्वारा स्वीकार किए जाने की आवश्यकता है और यदि आप किसी कंपनी में काम कर रहे हैं तो देखें कि क्या कोई कंपनी सम्मेलन है। कंपनी के लिए मैं किसी भी समूह के बारे में सोच रहा हूं, यह एक ओपन सोर्स प्रोजेक्ट टीम या प्रोग्रामर्स का एक ढीला संग्रह हो। अगर हर कोई बस जो उपलब्ध था, वह लगभग उनकी आवश्यकताओं को पूरा करता है, तो मुझे लगता है कि हमें नवीनता में कमी होगी।
लाजर

2

मैं आपके सिस्टम के लिए आपके द्वारा उपयोग किए जा रहे पैटर्न पर विचार करूंगा, नामकरण परंपराओं / कैटलॉगिंग / टेंडिंग के समूहों का उपयोग किए गए पैटर्न द्वारा परिभाषित किया जाना है। व्यक्तिगत रूप से, मैं इन नामकरण सम्मेलनों के लिए छड़ी करता हूं क्योंकि वे किसी अन्य व्यक्ति के लिए मेरे कोड को लेने और उसके साथ चलने में सक्षम होने का सबसे संभावित तरीका हैं।

उदाहरण के लिए UserRecordsClerk को जेनेरिक RecordsClerk इंटरफ़ेस का विस्तार करने के रूप में समझाया जा सकता है, जो UserRecordsClerk और CompanyRecordsClerk दोनों कार्यान्वित करते हैं और फिर विशेषज्ञ होते हैं, जिसका अर्थ है कि इंटरफ़ेस के तरीकों को देखने के लिए कि इसके उप-वर्ग क्या करते हैं / आम तौर पर हैं।

जानकारी के लिए डिज़ाइन पैटर्न जैसी कोई पुस्तक देखें , यह एक उत्कृष्ट पुस्तक है और आपको यह स्पष्ट करने में सहायता कर सकती है कि आप अपने कोड के साथ कहाँ होना चाहते हैं - यदि आप पहले से इसका उपयोग नहीं कर रहे हैं! ; ओ)

जब तक आपका पैटर्न अच्छी तरह से चुना गया है और तब तक इस्तेमाल किया जाता है, तब तक मैं मानता हूं, तब तक बहुत ही सीधे-सादे वर्ग के नाम पर्याप्त होने चाहिए!


मैंने उस पर ब्रायन एग्न्यू के जवाब पर टिप्पणी की है। मुझे नहीं लगता कि पैटर्न के नाम केवल कुछ मामलों (फैक्टरी, रणनीति) में अच्छे वर्ग के नाम बनाते हैं, लेकिन दूसरों (सिंगलटन) में नहीं। मैं चाहता हूं कि नाम उस वर्ग की नौकरी को प्रतिबिंबित करें जिस तरह से मैंने इसे लागू नहीं किया।
मेंढक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.