मुझे यह कहकर प्रस्तावना दें कि यह मेरा कोड नहीं है और न ही मेरे सहकर्मियों का कोड है। वर्षों पहले जब हमारी कंपनी छोटी थी, हमारे पास कुछ ऐसे प्रोजेक्ट थे जिनकी हमें जरूरत थी कि हमारे पास इसकी क्षमता नहीं थी, इसलिए वे आउटसोर्स किए गए थे। अब, मेरे पास सामान्य रूप से आउटसोर्सिंग या ठेकेदारों के खिलाफ कुछ भी नहीं है, लेकिन उनके द्वारा उत्पादित कोडबेस डब्ल्यूटीएफ का एक द्रव्यमान है। यह कहा जा रहा है, यह (ज्यादातर) काम करता है, इसलिए मुझे लगता है कि मैंने देखा है कि यह आउटसोर्स परियोजनाओं के शीर्ष 10% में है।
जैसे-जैसे हमारी कंपनी बढ़ी है, हमने अपने विकास को घर में ले जाने की कोशिश की है। यह विशेष परियोजना मेरी गोद में उतरी है इसलिए मैं इस पर जा रहा हूं, इसे साफ करना, परीक्षण जोड़ना, आदि।
एक पैटर्न है जिसे मैंने बहुत बार दोहराया है और ऐसा लगता है कि यह बहुत ही अजीब तरह से भयानक है कि मैंने सोचा कि अगर कोई कारण है और मैं इसे नहीं देखता हूं। पैटर्न एक सार्वजनिक विधि या सदस्यों के साथ एक वस्तु है, बस एक सार्वजनिक निर्माता है जो ऑब्जेक्ट के सभी काम करता है।
उदाहरण के लिए, (कोड जावा में है, अगर यह मायने रखता है, लेकिन मुझे उम्मीद है कि यह अधिक सामान्य प्रश्न होगा):
public class Foo {
private int bar;
private String baz;
public Foo(File f) {
execute(f);
}
private void execute(File f) {
// FTP the file to some hardcoded location,
// or parse the file and commit to the database, or whatever
}
}
यदि आप सोच रहे हैं, तो इस प्रकार के कोड को अक्सर निम्नलिखित तरीके से कहा जाता है:
for(File f : someListOfFiles) {
new Foo(f);
}
अब, मुझे बहुत पहले सिखाया गया था कि एक लूप में तात्कालिक वस्तुएं आमतौर पर एक बुरा विचार है, और यह कि कंस्ट्रक्टरों को कम से कम काम करना चाहिए। इस कोड को देखकर ऐसा लगता है कि कंस्ट्रक्टर को गिराना और execute
सार्वजनिक स्थैतिक विधि बनाना बेहतर होगा ।
मैंने ठेकेदार से पूछा कि यह इस तरह क्यों किया गया था, और मुझे जो प्रतिक्रिया मिली वह थी "यदि आप चाहें तो हम इसे बदल सकते हैं"। जो वास्तव में मददगार नहीं था।
वैसे भी, किसी भी प्रोग्रामिंग भाषा में ऐसा करने का कभी कोई कारण है, या यह डेली डब्ल्यूटीएफ के लिए एक और सबमिशन है?
public static void main(string[] args)
और जिन्होंने वस्तुओं के बारे में सुना है, फिर उन्हें एक साथ मैश करने की कोशिश की।