हमारे codebase पुराने और नए प्रोग्रामर, अपने आप की तरह है, जल्दी से यह करने के लिए सीखना है जिस तरह से यह किया है एकरूपता की खातिर। यह सोचकर कि हमें कहीं से शुरुआत करनी है, मैंने इसे अपने लिए एक डेटा धारक वर्ग के रूप में फिर से तैयार करने के लिए लिया:
- सेटर विधियों को हटा दिया और सभी क्षेत्रों को बनाया
final
(मुझे लगता है "final
अच्छा है" स्वयंसिद्ध रूप से)। बसने वाले का उपयोग केवल कंस्ट्रक्टर में किया गया था, क्योंकि यह निकलता है, इसलिए इसका कोई साइड-इफेक्ट नहीं था। - एक बिल्डर वर्ग का परिचय दिया
बिल्डर वर्ग आवश्यक था क्योंकि कंस्ट्रक्टर (जो पहली जगह में रिफैक्टिंग को प्रेरित करता है) कोड की लगभग 3 पंक्तियों तक फैला हुआ है। इसके बहुत सारे पैरामीटर हैं।
जैसा कि किस्मत में होगा, मेरा एक साथी एक अन्य मॉड्यूल पर काम कर रहा था और उसे बसने वालों की जरूरत थी, क्योंकि उसके लिए आवश्यक मूल्य प्रवाह में विभिन्न बिंदुओं पर उपलब्ध हो गए थे। इस प्रकार कोड इस तरह दिखता है:
public void foo(Bar bar){
//do stuff
bar.setA(stuff);
//do more stuff
bar.setB(moreStuff);
}
मैंने तर्क दिया कि उन्हें इसके बजाय बिल्डर का उपयोग करना चाहिए, क्योंकि बसने वालों से छुटकारा पाने से खेतों को अपरिवर्तनीय रहने की अनुमति मिलती है (उन्होंने मुझे पहले अप्राप्यता के बारे में शेख़ी सुना है), और यह भी क्योंकि बिल्डरों ने ऑब्जेक्ट निर्माण को लेन-देन करने की अनुमति दी है। मैंने निम्नलिखित छद्मकोड को स्केच किया:
public void foo(Bar bar){
try{
bar.setA(a);
//enter exception-throwing stuff
bar.setB(b);
}catch(){}
}
यदि उस अपवाद में आग लगती है, bar
तो भ्रष्ट डेटा होगा, जो एक बिल्डर के साथ बचा होगा:
public Bar foo(){
Builder builder=new Builder();
try{
builder.setA(a);
//dangerous stuff;
builder.setB(b);
//more dangerous stuff
builder.setC(c);
return builder.build();
}catch(){}
return null;
}
मेरे साथियों ने प्रतिशोध लिया कि प्रश्न में अपवाद कभी भी आग नहीं लगेगा, जो कोड के उस विशेष क्षेत्र के लिए पर्याप्त उचित है, लेकिन मेरा मानना है कि पेड़ के लिए जंगल गायब है।
समझौता पुराने समाधान को वापस करने का था, अर्थात् बिना किसी पैरामीटर के एक कंस्ट्रक्टर का उपयोग करें और जरूरत के अनुसार सब कुछ सेट करें। तर्क यह है कि इस समाधान KISS सिद्धांत है, जो मेरा उल्लंघन करता है, इस प्रकार था।
मैं इस कंपनी (6 महीने से कम) के लिए नया हूं और पूरी तरह से जानता हूं कि मैंने इसे खो दिया। मेरे पास प्रश्न हैं:
- क्या "पुराने तरीके" के बजाय बिल्डर्स का उपयोग करने का एक और तर्क है?
- क्या मैं जिस प्रस्ताव का प्रस्ताव करता हूं वह वास्तव में इसके लायक है?
लेकिन वास्तव में,
- जब आप कुछ नया करने की वकालत करते हैं तो क्या आपके पास इस तरह के तर्क प्रस्तुत करने के लिए कोई सुझाव है?
setA
?