हमारे आवेदन के स्रोत कोड में हमारे पास बहुत सारे स्थान हैं, जहां एक वर्ग में समान नाम और विभिन्न मापदंडों के साथ कई तरीके हैं। उन विधियों में हमेशा एक 'पिछले' विधि के सभी मापदण्ड होते हैं।
यह लंबे विकास (विरासत कोड) और इस सोच का परिणाम है (मेरा मानना है):
" एक ऐसा तरीका है जो M करता है। A. मुझे A + B. करने की आवश्यकता है। ठीक है, मुझे पता है ... मैं M में एक नया पैरामीटर जोड़ूंगा, उसके लिए एक नया तरीका बनाऊंगा, M से नई विधि में कोड स्थानांतरित करूंगा। एक और पैरामीटर के साथ, वहां पर A + B करें और नए पैरामीटर के डिफ़ॉल्ट मान के साथ M से नई विधि को कॉल करें। "
यहाँ एक उदाहरण है (जावा जैसी भाषा में):
class DocumentHome {
(...)
public Document createDocument(String name) {
// just calls another method with default value of its parameter
return createDocument(name, -1);
}
public Document createDocument(String name, int minPagesCount) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false);
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false, "");
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank, String title) {
// here the real work gets done
(...)
}
(...)
}
मुझे ऐसा लगता है कि यह गलत है। न केवल यह कि हम इस तरह के नए मापदंडों को हमेशा के लिए जोड़कर नहीं रख सकते हैं, लेकिन सभी तरीकों के बीच निर्भरता के कारण कोड को बदलना / बदलना मुश्किल है।
यहाँ कुछ तरीके हैं कि यह कैसे बेहतर किया जाए:
एक पैरामीटर ऑब्जेक्ट का परिचय दें:
class DocumentCreationParams { String name; int minPagesCount; boolean firstPageBlank; String title; (...) } class DokumentHome { public Document createDocument(DocumentCreationParams p) { // here the real work gets done (...) } }
DocumentHome
कॉल करने से पहले ऑब्जेक्ट को पैरामीटर सेट करेंcreateDocument()
@In DocumentHome dh = null; (...) dh.setName(...); dh.setMinPagesCount(...); dh.setFirstPageBlank(...); Document newDocument = dh.createDocument();
अलग-अलग तरीकों से काम को अलग करें और आवश्यकतानुसार कॉल करें:
@In DocumentHome dh = null; Document newDocument = dh.createDocument(); dh.changeName(newDocument, "name"); dh.addFirstBlankPage(newDocument); dh.changeMinPagesCount(new Document, 10);
मेरे सवाल:
- वर्णित समस्या वास्तव में एक समस्या है?
- सुझाए गए समाधानों के बारे में आप क्या सोचते हैं? आप किसे पसंद करेंगे (आपके अनुभव के आधार पर)?
- क्या आप किसी अन्य समाधान के बारे में सोच सकते हैं?