2010-12-14 16 views
8

तक पहुँचने जावा में बनाम तरीकों के खेतों से गुजर रहा, निम्नलिखित वर्ग दी:जावा शैली/बेस्ट प्रैक्टिस - सीधे

public class MyClass { 
    private final Dependency dependency; 
    public MyClass(Dependency dependency) 
    { 
     this.dependency = dependency; 
    } 

    public void doWork() 
    { 
     // validate dependency... 
    } 

doWork विधि एक विधि dependency का उपयोग करता है को लागू करने की जरूरत है।

निम्नलिखित दो भिन्नताओं में से कौन सा "सर्वोत्तम अभ्यास" माना जाता है, और क्यों?

// Access dependency directly 
    void validateDependency() 
    { 
     this.dependency.something(); 
    } 

    // access dependency as passed to the method 
    void validateDependency(Dependency dependency) 
    { 
     dependency.something(); 
    } 

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

हालांकि, मुझे यहां जावा सम्मेलन/सर्वोत्तम अभ्यास में रूचि है।

+4

यह निश्चित रूप से स्थिति पर निर्भर करता है। –

+1

बिल्कुल! स्थिति पर निर्भर करता है - उदाहरण के लिए, यदि आपके पास ऐसे ऑपरेशन हैं जो अस्थायी रूप से युग्मित हैं (किसी विशिष्ट क्रम में कॉल करने की आवश्यकता है), तो आपको बाद वाले का उपयोग करना चाहिए। अन्यथा आप अपने कोड के ग्राहकों/रखरखाव के साथ एनपीई या अधिक भ्रमित व्यवहार प्राप्त कर सकते हैं। – lucas1000001

+0

भी, इसे चरम पर ले जाने के लिए - मुझे लगता है कि आप वास्तव में कार्यात्मक बनाम ऑब्जेक्ट उन्मुख प्रोग्रामिंग शैलियों पर विचार कर रहे हैं - ओओ पूर्व होने के बाद, और बाद वाले कार्यात्मक। – lucas1000001

उत्तर

9

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

असल में, यह मुझे इंगित करेगा कि राज्य का वह टुकड़ा वास्तव में कक्षा से संबंधित नहीं होना चाहिए। या यह कि विधि वर्ग से संबंधित नहीं है।

एक पैरामीटर "इतना है कि यह इकाई परीक्षण करना आसान है" का उपयोग करना एक अच्छा संकेत बाद मानती है कि (विधि कक्षा में नहीं होना चाहिए) है।

+0

सही मेरे अच्छे एनन पर +1 –

-1

ऐसा करने का कोई सही तरीका नहीं है। मैं सिर्फ चर को डालने पसंद करता हूं।

+1

-1 एपीआई को और अधिक अच्छी तरह से सोचा जाना चाहिए। –

-1

निर्भरता इंजेक्शन। दूसरा विकल्प "सर्वश्रेष्ठ" है।

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

+1

-1 उनका "निर्भरता" एक सदस्य चर है। यह पहले से ही युग्मित है। इस "निर्भरता इंजेक्शन" को बुलाकर स्थिति को खराब कर देता है। –

3

खैर, अपने उदाहरण में आप समारोह जो अपने आप में एक स्थिर समारोह, नहीं एक सदस्य कार्य करने के लिए उधार देता है निर्भरता के साथ कुछ करने के लिए पूछ रहे हैं।

अंगूठे का मेरा नियम है: उपयोग सदस्यों को सीधे जब एक वस्तु है कि सदस्य मालिक पर एक विधि बुला लेकिन संदर्भ पारित जब कर/उत्तरार्द्ध

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

संबंधित मुद्दे