मान लीजिए कि हमारे पास एक ऐसा तरीका है foo(String bar)
जो केवल कुछ मानदंडों को पूरा करने वाले तारों पर संचालित होता है; उदाहरण के लिए, यह लोअरकेस होना चाहिए, खाली नहीं होना चाहिए या केवल व्हाट्सएप होना चाहिए, और पैटर्न से मेल खाना चाहिए [a-z0-9-_./@]+
। विधि के लिए प्रलेखन इन मानदंडों को बताता है।
क्या इस मानदंड से विधि और सभी विचलन को अस्वीकार करना चाहिए , या क्या विधि को कुछ मानदंडों के बारे में अधिक क्षमा करना चाहिए? उदाहरण के लिए, यदि प्रारंभिक विधि है
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
this.bar = bar;
}
और दूसरी क्षमा करने की विधि है
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
bar = bar.toLowerCase().trim().replaceAll(" ", "_");
if (!bar.matches(BAR_PATTERN_STRING) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
}
this.bar = bar;
}
क्या दस्तावेज को यह बताने के लिए बदल दिया जाना चाहिए कि यह रूपांतरित हो जाएगा और यदि संभव हो तो परिवर्तित मूल्य पर सेट किया जाना चाहिए, या विधि को यथासंभव सरल रखा जाना चाहिए और किसी भी और सभी विचलन को अस्वीकार करना चाहिए? इस मामले में, bar
किसी एप्लिकेशन के उपयोगकर्ता द्वारा सेट किया जा सकता है।
इसके लिए प्राथमिक उपयोग का मामला उपयोगकर्ताओं को एक विशिष्ट स्ट्रिंग पहचानकर्ता द्वारा भंडार से वस्तुओं तक पहुंचने का होगा। रिपॉजिटरी में प्रत्येक ऑब्जेक्ट के पास इसे पहचानने के लिए एक अद्वितीय स्ट्रिंग होनी चाहिए। ये रिपॉजिटरी वस्तुओं को विभिन्न तरीकों से स्टोर कर सकते हैं (sql server, json, xml, बाइनरी, आदि) और इसलिए मैंने सबसे कम सामान्य हर की पहचान करने की कोशिश की, जो अधिकांश नामकरण सम्मेलनों से मेल खाएगा।
foo
फ़ंक्शन होना चाहिए जो इसे स्वीकार करने वाले तर्कों में कठोर हो, और एक दूसरा सहायक फ़ंक्शन हो जो एक तर्क को "क्लीन" करने की कोशिश कर सकता है foo
। इस तरह, प्रत्येक विधि को अपने दम पर कम करना पड़ता है, और वे अधिक सफाई से प्रबंधित और एकीकृत कर सकते हैं। यदि उस मार्ग से नीचे जा रहे हैं, तो यह संभवतः अपवाद-भारी डिज़ाइन से दूर जाने में भी सहायक होगा; आप Optional
इसके बजाय कुछ का उपयोग कर सकते हैं , और फिर ऐसे कार्य हैं जो foo
आवश्यक होने पर फेंक अपवादों का उपभोग करते हैं ।