बॉयलरप्लेट कोड के पक्ष में एक तर्क यह है कि यदि आप इसे एक स्थान पर बदलते हैं, तो यह केवल कोड के एक प्रवाह को प्रभावित करता है। यह इस तथ्य के खिलाफ संतुलित होना चाहिए कि अधिक-से-अक्सर-नहीं, आप वास्तव में कोड के हर टुकड़े को प्रभावित करने वाले बदलाव को प्रभावित करना चाहते हैं। लेकिन मैंने ऐसे दुर्लभ उदाहरण देखे हैं जो तर्क का समर्थन करते हैं।
मान लीजिए कि आपके पास कोड का एक टुकड़ा है जो कहता है
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
इसका उपयोग आपके कोड में लगभग 2 स्थानों पर किया जाता है।
एक दिन कोई साथ आता है और कहता है "ठीक है, केवल इसी रास्ते में, हम चाहते हैं कि आप इसे फू करने से पहले बार को पकड़ें।"
और आपको लगता है कि "अच्छी तरह से यह सरल है।"
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
तब आपका उपयोगकर्ता कुछ नई कार्यक्षमता जोड़ता है और आपको लगता है कि यह FooTheBar के साथ अच्छी तरह से फिट बैठता है। और आप उनसे विनम्रतापूर्वक पूछते हैं कि क्या आपको ग्रेमोमिट करना चाहिए इससे पहले कि आप इसे फू करें और वे कहते हैं "नहीं, इस बार नहीं"।
तो आप बस ऊपर दिए गए तरीके को कहें।
लेकिन तब आपका उपयोगकर्ता कहता है "ठीक है, रुको, तीसरे मामले में, हम चाहते हैं कि आप BeFooed को कॉल करने से पहले डूडल द बार पर जाएं।"
कोई बात नहीं, तुम सोचते हो, मैं ऐसा कर सकता हूं।
public ForTheBar(Foo foo, bool shouldIGrommit, bool shouldIDoodle)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
if (shouldIDoodle)
{
bar.BeDoodled();
}
return bar.BeFooed();
}
अचानक आपका कोड कम बॉयलर हो रहा है। शायद आपको बार-बार कोड की दो पंक्तियों को स्वीकार करना चाहिए था। अब तक आपके पास कोड के तीन टुकड़े होंगे, प्रत्येक 2-3 लाइनें लंबी और बहुत अधिक दोहराई हुई नहीं दिखेंगी।
इस सबने कहा, मैं इस बात का जवाब दूंगा कि "यह एक सामान्य मामला नहीं है, और जब ऐसा होता है, तो आप रिफ्लेक्टर कर सकते हैं।"
एक अन्य तर्क जो मैंने हाल ही में सुना है वह यह है कि बॉयलरप्लेट कोड कभी-कभी आपको कोड नेविगेट करने में मदद कर सकता है। हम जिस उदाहरण पर चर्चा कर रहे थे, वह था कि हमने कितने टन बॉयलरप्लेट मैपिंग कोड को हटा दिया और इसे ऑटोमैपर के साथ बदल दिया। अब, यह तर्क दिया गया था, क्योंकि सब कुछ कन्वेंशन-आधारित है, आप आईडीई को "यह संपत्ति कहां सेट है," नहीं कह सकते हैं और यह जानने की उम्मीद करते हैं।
मैंने देखा है कि लोग IoC कंटेनरों के बारे में इसी तरह की बातें करते हैं।
यह कहने के लिए नहीं कि मैं उनसे सहमत हूं, लेकिन फिर भी यह एक उचित तर्क है।