मैजिक नंबरों के कारण न केवल कोड खराब है , बल्कि इसलिए कि यह रिटर्न कोड में कई अर्थों को समेटता है, अपने अर्थ के अंदर छुपाता है एक त्रुटि, एक चेतावनी, एक सत्र बनाने की अनुमति या तीन का संयोजन, जो इसे एक कठिन बनाता है निर्णय लेने के लिए बुरा इनपुट।
मैं निम्नलिखित रिफ्लेक्टरिंग का सुझाव दूंगा: संभावित परिणामों के साथ एक एनम लौटा देना (जैसा कि अन्य उत्तरों में सुझाव दिया गया है), लेकिन एनम को एक विशेषता से जोड़ना यह दर्शाता है कि क्या यह एक इनकार है, एक छूट (मैं आपको यह आखिरी बार पास करने दूंगा) या यदि यह ठीक है (पास):
public LoginResult processLogin(HttpServletRequest request, HttpServletResponse response,
int pwChangeDays, ServletContext ServContext) {
}
==> LoginResult.java <==
public enum LoginResult {
NOT_LOGGED_IN(Severity.DENIAL),
ALREADY_LOGGED_IN(Severity.PASS),
INACTIVE_USER(Severity.DENIAL),
VALID_USER(Severity.PASS),
NEEDS_PASSWORD_CHANGE(Severity.WAIVER),
INVALID_APP_USER(Severity.DENIAL),
INVALID_NETWORK_USER(Severity.DENIAL),
NON_APPROVED_ADDRESS(Severity.DENIAL),
ACCOUNT_LOCKED(Severity.DENIAL),
ACCOUNT_WILL_BE_LOCKED(Severity.WAIVER);
private Severity severity;
private LoginResult(Severity severity) {
this.severity = severity;
}
public Severity getSeverity() {
return this.severity;
}
}
==> गंभीरता.जावा <==
public enum Severity {
PASS,
WAIVER,
DENIAL;
}
==> टेस्ट.जावा <==
public class Test {
public static void main(String[] args) {
for (LoginResult r: LoginResult.values()){
System.out.println(r + " " +r.getSeverity());
}
}
}
प्रत्येक लॉगिन के लिए गंभीरता दिखाने वाले टेस्ट.जावा के लिए आउटपुट:
NOT_LOGGED_IN : DENIAL
ALREADY_LOGGED_IN : PASS
INACTIVE_USER : DENIAL
VALID_USER : PASS
NEEDS_PASSWORD_CHANGE : WAIVER
INVALID_APP_USER : DENIAL
INVALID_NETWORK_USER : DENIAL
NON_APPROVED_ADDRESS : DENIAL
ACCOUNT_LOCKED : DENIAL
ACCOUNT_WILL_BE_LOCKED : WAIVER
एनम मूल्य और इसकी गंभीरता दोनों के आधार पर, आप यह तय कर सकते हैं कि सत्र का निर्माण आगे बढ़ता है या नहीं।
संपादित करें:
@ T.Sar की टिप्पणी की प्रतिक्रिया के रूप में, मैंने (OK, WARNING और ERROR) के बजाय PASS, WAIVER और DENIAL के गंभीरता के संभावित मूल्यों को बदल दिया। इस तरह यह स्पष्ट है कि एक DENIAL (पहले ERROR) प्रति त्रुटि नहीं है और जरूरी नहीं कि अपवाद को फेंक दिया जाए। कॉलर ऑब्जेक्ट की जांच करता है और यह तय करता है कि अपवाद को फेंकना है या नहीं, लेकिन कॉल करने के परिणामस्वरूप DENIAL एक वैध परिणाम स्थिति है processLogin(...)
।
- पास: आगे बढ़ो, अगर कोई पहले से मौजूद नहीं है तो एक सत्र बनाएं
- WAIVER: इस बार आगे बढ़ें, लेकिन अगली बार उपयोगकर्ता को आपको पास करने की अनुमति नहीं दी जा सकती
- डेनियल: क्षमा करें, उपयोगकर्ता पास नहीं कर सकता, सत्र न बनाएं