कुछ महीने पहले मैंने एक नई परियोजना में काम करना शुरू किया था, और कोड के माध्यम से जाने पर यह मेरे द्वारा उपयोग किए जाने वाले स्थिर तरीकों की मात्रा को स्ट्रोक करता था। न केवल उपयोगिता विधियों के रूप में collectionToCsvString(Collection<E> elements)
, बल्कि उनमें बहुत सारे व्यावसायिक तर्क भी रखे गए हैं।
जब मैंने इसके पीछे तर्क के लिए जिम्मेदार व्यक्ति से पूछा, तो उसने कहा कि यह वसंत के अत्याचार से बचने का एक तरीका था । यह इस सोच प्रक्रिया के आसपास कुछ जाता है: एक ग्राहक रसीद निर्माण विधि को लागू करने के लिए, हमारे पास एक सेवा हो सकती है
@Service
public class CustomerReceiptCreationService {
public CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
अब, उस व्यक्ति ने कहा कि वह अनावश्यक रूप से स्प्रिंग द्वारा प्रबंधित कक्षाओं को नापसंद करता है, मूल रूप से क्योंकि यह प्रतिबंध लगाता है कि ग्राहक वर्ग को स्वयं स्प्रिंग बीन्स होना चाहिए। हम अंत में स्प्रिंग द्वारा प्रबंधित सब कुछ करते हैं, जो हमें एक प्रक्रियात्मक तरीके से स्टेटलेस वस्तुओं के साथ काम करने के लिए मजबूर करता है। कमोबेश यहाँ क्या बताया गया है https://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
इसलिए उपरोक्त कोड के बजाय उसके पास है
public class CustomerReceiptCreator {
public static CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
जब संभव हो तो हम अपनी कक्षाओं को प्रबंधित करने से बचने के मुद्दे पर बहस कर सकते हैं, लेकिन जो मैं नहीं देखता वह सब कुछ स्थिर होने का लाभ है। ये स्थैतिक विधियां भी स्टेटलेस हैं, इसलिए बहुत अधिक ओओ नहीं हैं। मैं कुछ के साथ अधिक सहज महसूस करूंगा
new CustomerReceiptCreator().createReceipt()
उनका दावा है कि स्थैतिक तरीकों से कुछ अतिरिक्त लाभ होते हैं। अर्थात्:
- पढ़ने में आसान। स्थैतिक विधि को आयात करें और हमें केवल कार्रवाई के बारे में ध्यान रखने की आवश्यकता है, कोई वर्ग यह नहीं कर रहा है।
- जाहिर है डीबी कॉल से मुक्त एक विधि है, इसलिए प्रदर्शन-वार सस्ते; और यह स्पष्ट करने के लिए एक अच्छी बात है, ताकि संभावित ग्राहक को कोड में जाने और उसके लिए जांच करने की आवश्यकता हो।
- परीक्षण लिखने में आसान।
लेकिन मुझे लगता है कि इसके साथ कुछ पूरी तरह से सही नहीं है, इसलिए मैं इस पर कुछ और अनुभवी डेवलपर्स के विचार सुनना चाहूंगा।
तो मेरा सवाल यह है कि प्रोग्रामिंग के इस तरीके के संभावित नुकसान क्या हैं?
static
विधि के बारे में आप ऊपर बता रहे हैं, वह सिर्फ एक सामान्य फैक्टरी विधि है। फैक्ट्री के तरीकों को स्थिर बनाना आम तौर पर स्वीकृत सम्मलेन है, कई सम्मोहक कारणों से। क्या कारखाने की विधि यहां उपयुक्त है या नहीं यह अलग बात है।