हेल्पर और उपयोगिता वर्गों के बीच अंतर क्या हैं?


116

कैसे निर्धारित करें कि एक वर्ग XHelper या XUtils कैसे कॉल करें?

मेरे मन को :

हेल्पर क्लास , एक ऐसा वर्ग है जो तुरंत काम कर सकता है और कुछ व्यावसायिक काम कर सकता है

Utils class , एक स्थिर वर्ग है जो एक तरह के उदाहरण पर छोटे और दोहराव वाले ऑपरेशन करता है (उदाहरण के लिए ApacheUtils या Apache से IOUtils की कक्षाएं)


5
"व्यावसायिक कार्य" यहाँ का मुख्य भेद है। मुझे यह एक Utilsस्थिर वर्ग के लिए उपयोग करने के लिए एक उपयोगी सम्मेलन है जो संगठन में, या किसी अन्य संगठन में कहीं भी इस्तेमाल किया जा सकता है। एक Helperवर्ग में एक समान कोड होता है जिसे एक परियोजना के भीतर फिर से उपयोग किया जा सकता है और परियोजना के भीतर निर्भरता होती है। बेशक, कोई आम तौर पर स्वीकृत नियम नहीं है, लेकिन मुझे यह उपयोगी लगता है।
स्टीफन होक्सिंग

1
@StephenHosking आपकी व्याख्या मेरे लिए और शायद सभी के लिए सबसे अधिक प्रेरक है। यदि संभव हो तो आप अपनी व्याख्या को इस पोस्ट के वास्तविक उत्तर के रूप में पोस्ट कर सकते हैं बजाय केवल बाईं टिप्पणी के।
बिगएर

@ऊंची छलांग। थैंक्यू, लेकिन मेरा केवल एक सुझाव है, जवाब नहीं। मुझे खुशी है कि लोगों ने इसे मददगार पाया।
स्टीफन होकिंग

जवाबों:


102

कई नामकरण शैलियों का उपयोग करना है। मैं यूटिल्स का सुझाव सिर्फ इसलिए दूंगा क्योंकि यह अधिक सामान्य है।

एक उपयोगिता वर्ग को समझा जाता है कि केवल स्थैतिक विधियां हों और वे स्टेटलेस हों। आप ऐसी कक्षा का उदाहरण नहीं बनायेंगे।

एक हेल्पर एक उपयोगिता वर्ग हो सकता है या यह स्टेटफुल हो सकता है या एक उदाहरण की आवश्यकता हो सकती है। यदि संभव हो तो मैं इससे बचूंगा।

यदि आप नाम को अधिक विशिष्ट बना सकते हैं। उदाहरण के लिए, यदि इसकी छँटाई विधियाँ हैं, तो इसे XSorter करें

सरणियों के लिए आप सहायक वर्गों की तरह पा सकते हैं

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

उपयोगिता वर्ग के लिए एक छोटा हाथ बीटीडब्ल्यू एक उदाहरण है जिसमें कोई उदाहरण नहीं है

enum XUtils {;
    static methods here
}

यदि आपको एक इंटरफ़ेस लागू करने की आवश्यकता है, तो मैं एक स्टेटलेस सिंगलटन का उपयोग करूंगा।

enum XHelper implements RequiredInterface {
   INSTANCE;
   // no instance fields.
}

मैं इस पोस्ट में इस stackoverflow.com/a/2135797/787698 , कि Xutils एक स्थिर वर्ग है जिसमें कोई निर्भरता नहीं है। आप उसके बारे में क्या सोच रहे हैं?
जाककैम

@ जक्कम दिलचस्प बिंदु। एक सहायक स्टेटफुल हो सकता है और एक उदाहरण की आवश्यकता हो सकती है। यदि संभव हो तो मैं एक स्टेटलेस और उदाहरण-रहित उपयोगिता वर्ग का उपयोग करूंगा।
पीटर लॉरी

क्या आप समझते हैं कि Xutils एक स्थिर वर्ग है जिसमें कोई निर्भरता नहीं है ?
जक्कम

मुझे उस पोस्ट में "xutils" या "कोई निर्भरता नहीं" मिल सकती है।
पीटर लॉरी

1
@ जॉन उस मामले में एक उपयोगिता विधि वांछनीय नहीं है क्योंकि परीक्षण उद्देश्यों के लिए इसका मजाक उड़ाना कठिन है।
पीटर लॉरी

16

सामान्य रूप में? यह पूरी तरह से मनमाना है। इसके लिए कोई नियम नहीं हैं।


8

एक उपयोगिता सामान्य उपयोग का एक "पत्ता नोड" वर्ग है। यही है, इसमें आपकी परियोजना में कोई निर्भरता नहीं है और इसे बिना टूटे या बेकार हो जाने के लिए परियोजना से परियोजना में पोर्ट किया जा सकता है। उदाहरण: Vector3, RandomNumberGenerator, StringMatcher, आदि ...

एक "सहायक" किसी भी वर्ग को लगता है जिसका डिजाइन किसी अन्य वर्ग की सहायता करना है। ये आपके प्रोजेक्ट पर निर्भर हो सकते हैं या नहीं भी। यदि आप एक GameNetworkClientक्लास बना रहे हैं , तो आप कह सकते हैं कि GameNetworkConnectionक्लास एक 'हेल्पर' है, क्योंकि यह "हेल्प" करता है GameNetworkClient

डेवलपर्स जिस तरह से टूल का संदर्भ लेते हैं, वह इन शब्दों के सामान्य उपयोग को दर्शाता है। यदि आप "उपयोगी" बनाम "उपयोगी" के रूप में वर्णित श्रवण साधनों को याद कर सकते हैं, तो एक सहायक उपकरण कुछ संदर्भ देता है (पनीर grater पनीर को पीसने में मदद करता है, मकई स्ट्रिपर मकई को पट्टी करने में मदद करता है, स्पीड लोडर एक बन्दूक को फिर से लोड करने में मदद करता है)। एक "उपयोगिता" को विभिन्न प्रकार के संदर्भों (WD-40, डक्ट टेप, सेना-चाकू, गोंद, टॉर्च, आदि ...) में काम करने की उम्मीद है।


5

जैसा कि जेसपर ने कहा, यह पूरी तरह से मनमाना है । आप सोच सकते हैं कि आपके संगठन के लिए क्या काम करता है और यह सम्मेलन करता है।

मेरे लिए, यह कुछ इस तरह है:

बर्तन - स्थिर वर्ग, जिसे स्वतंत्र रूप से कहीं भी ले जाया और आयात किया जा सकता है।

सामान्य कार्य करना जो विभिन्न मॉड्यूल में उपयोगी हो सकते हैं। जैसा कि पीटर लॉरी ने कहा, अधिक विशिष्ट नाम उपयोगी हैं।

सहायक - कक्षा एक अन्य वर्ग या एक मॉड्यूल की मदद कर रही है।

कार्य जो केवल उस मॉड्यूल में उपयोग किए जाते हैं जो इसे रखा गया है और यह समझ में नहीं आएगा कि कहीं और आयात किया जाए। इसलिए नाम अधिक विशिष्ट हो सकता है - ModuleName हेल्पर (जैसे एडमिनिस्ट्रेशन हेल्पर , लॉगिन हेल्पर )


2

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

मुझे व्यक्तिगत रूप से XHelper बेहतर लगता है, लेकिन मुझे विदेशी कोड में XUtils अधिक बार दिखाई देता है।

मुझे "बहुवचन" नामकरण योजना भी पसंद है जो आपको जेडीके और अमरूद दोनों में मिलेगी :

यदि कोई वर्ग Collectionवस्तुओं के साथ व्यवहार करता है, तो उसे बुलाया जाता हैCollections

ऐरे> ऐरे (jdk)
सूची> सूचियाँ (अमरूद)
मानचित्र> मानचित्र (अमरूद)

आदि।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.