কোডটি কেবল ম্যাজিক সংখ্যার জন্যই নয় , কারণ এটি রিটার্ন কোডের বিভিন্ন অর্থকে একত্রিত করে, এর অর্থটির ভিতরে একটি ত্রুটি, একটি সতর্কতা, একটি সেশন তৈরির অনুমতি বা তিনটির সংমিশ্রণকে গোপন করে, যা এটিকে একটি করে তোলে সিদ্ধান্ত নেওয়ার জন্য খারাপ ইনপুট।
আমি নিম্নলিখিত রিফ্যাক্টরিংয়ের পরামর্শ দেব: সম্ভাব্য ফলাফল সহ এনাম ফিরিয়ে দেওয়া (অন্যান্য জবাব হিসাবে পরামর্শ দেওয়া হয়েছে), তবে এনামকে এমন একটি গুণ যুক্ত করা হবে যা ইঙ্গিত করে যে এটি অস্বীকার, ছাড় নয় (আমি আপনাকে এই শেষবারটি পাস করতে দেব) বা যদি এটি ঠিক থাকে (পাস):
public LoginResult processLogin(HttpServletRequest request, HttpServletResponse response,
int pwChangeDays, ServletContext ServContext) {
}
==> লগইনআরসাল্ট.জভা <==
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
এনাম মান এবং এর তীব্রতা উভয়ের উপর ভিত্তি করে, আপনি সিদ্ধান্ত নিতে পারেন যে সেশন তৈরিটি এগিয়ে যায় কিনা।
সম্পাদনা করুন:
@ টি.সারের মন্তব্যের প্রতিক্রিয়া হিসাবে, আমি তীব্রতার সম্ভাব্য মানগুলিকে (ওকে, সতর্কতা এবং ত্রুটিযুক্ত) পরিবর্তে পাস, ওয়েভার এবং ডেনিয়ালতে পরিবর্তন করেছি। এইভাবে এটি স্পষ্ট যে একটি ডেনিয়াল (পূর্ববর্তী ত্রুটি) প্রতি সেচ ত্রুটি নয় এবং অগত্যা কোনও ব্যতিক্রম ছোঁড়ার ক্ষেত্রে অনুবাদ করা উচিত নয় । কলার অবজেক্টটি পরীক্ষা করে সিদ্ধান্ত নেয় যে কোনও ব্যতিক্রম ছুঁড়ে ফেলবে কি না, তবে ডেনিয়াল কল করার ফলস্বরূপ একটি বৈধ ফলাফলের স্থিতি processLogin(...)
।
- পাস: এগিয়ে যান, একটি সেশন তৈরি করুন যদি ইতিমধ্যে উপস্থিত না থাকে
- ওয়েভার: এবার এগিয়ে যান, তবে পরবর্তী সময় ব্যবহারকারীর আপনাকে পাস করার অনুমতি দেওয়া হতে পারে না
- ডেনিয়াল: দুঃখিত, ব্যবহারকারী পাস করতে পারবেন না, একটি সেশন তৈরি করবেন না