बहुत समय पहले मैंने एक लेख पढ़ा है (मुझे विश्वास है कि एक ब्लॉग प्रविष्टि) जो मुझे नामकरण की वस्तुओं पर "सही" ट्रैक पर रखती है: अपने कार्यक्रम में चीजों के नामकरण के बारे में बहुत ही सतर्क रहें।
उदाहरण के लिए यदि मेरा आवेदन उपयोगकर्ताओं (कंपनियों के लिए एक विशिष्ट ऐप के रूप में) था, तो उन उपयोगकर्ताओं, कंपनियों और पते को संभालने के लिए मेरे पास एक User
, एक Company
और एक Address
डोमेन वर्ग होगा - और शायद कहीं एक UserManager
, CompanyManager
और एक AddressManager
है जो उन चीजों को संभालता है।
तो क्या आप बता सकते हैं कि वे क्या करते हैं UserManager
, CompanyManager
और AddressManager
क्या करते हैं? नहीं, क्योंकि प्रबंधक एक बहुत ही सामान्य शब्द है जो आपके डोमेन ऑब्जेक्ट्स के साथ कुछ भी करने के लिए फिट बैठता है।
मैंने जो लेख पढ़ा वह बहुत विशिष्ट नामों का उपयोग करके अनुशंसित है। यदि यह C ++ एप्लिकेशन UserManager
था और उपयोगकर्ताओं को आवंटित कर रहा था और उन्हें ढेर से मुक्त कर रहा था, तो यह उपयोगकर्ताओं को प्रबंधित नहीं करेगा बल्कि उनके जन्म और मृत्यु की रक्षा करेगा। हम्म, शायद हम इसे एक कह सकते हैं UserShepherd
।
या हो सकता है कि UserManager
प्रत्येक उपयोगकर्ता के डेटा के डेटा की जांच करना और क्रिप्टोग्राफिक रूप से डेटा पर हस्ताक्षर करना हो। तो हम एक होगा UserRecordsClerk
।
अब जब यह विचार मेरे साथ अटक गया है तो मैं इसे लागू करने का प्रयास करता हूं। और इस सरल विचार को आश्चर्यजनक रूप से कठिन लगता है।
मैं यह वर्णन कर सकता हूं कि कक्षाएं क्या करती हैं और (जब तक मैं त्वरित और गंदे कोडिंग में फिसल नहीं जाता हूं) जो कक्षाएं मैं लिखता हूं वह बिल्कुल एक काम करता है। मुझे उस विवरण से नामों तक जाने की याद आती है जो नामों की एक प्रकार की सूची है, एक शब्दावली जो अवधारणाओं को नामों में मैप करती है।
अंतत: मेरे दिमाग में पैटर्न कैटलॉग जैसा कुछ होना चाहिए (अक्सर डिजाइन पैटर्न आसानी से ऑब्जेक्ट नाम प्रदान करते हैं, उदाहरण के लिए एक कारखाना )
- फैक्टरी - अन्य वस्तुओं को बनाता है (डिजाइन पैटर्न से लिया गया नामकरण)
- शेफर्ड - एक चरवाहा वस्तुओं के जीवनकाल, उनके निर्माण और बंद को संभालता है
- सिंक्रोनाइज़र - दो या अधिक वस्तुओं (या ऑब्जेक्ट पदानुक्रम) के बीच डेटा की प्रतिलिपि बनाता है
नानी - निर्माण के बाद वस्तुओं को "प्रयोग करने योग्य" स्थिति तक पहुंचने में मदद करती है - उदाहरण के लिए अन्य वस्तुओं के लिए वायरिंग द्वारा
आदि आदि।
तो, आप उस मुद्दे को कैसे संभालते हैं? क्या आपके पास एक निश्चित शब्दावली है, क्या आप मक्खी पर नए नामों का आविष्कार करते हैं या क्या आप नामकरण की चीजों को इतना महत्वपूर्ण या गलत नहीं मानते हैं?
पुनश्च: मैं इस मुद्दे पर चर्चा करने वाले लेखों और ब्लॉगों के लिंक में भी दिलचस्पी रखता हूं। एक शुरुआत के रूप में, यहाँ मूल लेख है जो मुझे इसके बारे में सोचने को मिला: जावा क्लासेस का नाम लिए बिना 'मैनेजर'
अपडेट: उत्तरों का सारांश
इस बीच मैंने इस प्रश्न से जो सीखा, उसका थोड़ा सारांश यहां दिया गया है।
- नए रूपक बनाने की कोशिश नानी (नानी)
- अन्य रूपरेखा क्या करते हैं, इस पर एक नज़र डालें
इस विषय पर आगे के लेख / पुस्तकें:
- नियमित रूप से कक्षाओं के लिए आप अपने आप को प्रचलित / आकर्षित करने वाले कौन से नाम पाते हैं?
- नामकरण कक्षाओं के लिए सबसे अच्छा तरीका क्या है?
- पुस्तक: डिज़ाइन पैटर्न: पुन: प्रयोज्य वस्तु उन्मुख सॉफ्टवेयर के तत्व (हार्डकवर)
- पुस्तक: पैटर्न ऑफ़ एंटरप्राइज एप्लीकेशन आर्किटेक्चर (हार्डकवर)
- पुस्तक: कार्यान्वयन पैटर्न (पेपरबैक)
और नामों की एक वर्तमान सूची / उपसर्ग / प्रत्यय मैंने उत्तर से (विषयवार!) एकत्र किए:
- समन्वयक
- निर्माता
- लेखक
- पाठक
- हैंडलर
- पात्र
- मसविदा बनाना
- लक्ष्य
- कनवर्टर
- नियंत्रक
- राय
- फ़ैक्टरी
- सत्ता
- बाल्टी
और सड़क के लिए एक अच्छी टिप:
नामकरण पक्षाघात मत करो। हां, नाम बहुत महत्वपूर्ण हैं, लेकिन वे पर्याप्त महत्वपूर्ण नहीं हैं कि वे बड़ी मात्रा में समय बर्बाद करें। यदि आप 10 मिनट में एक अच्छा नाम नहीं सोच सकते हैं, तो आगे बढ़ें।