Kod sadece sihirli sayılardan dolayı kötü değil , aynı zamanda dönüş kodunda birkaç anlamı birleştirdiği için, anlamının içinde bir hata, bir uyarı, bir oturum oluşturma izni veya üçün bir kombinasyonunu gizleme anlamına gelir. karar vermede kötü girdi.
Aşağıdaki yeniden düzenleme önerebilirim: (diğer yanıtlarda önerildiği gibi) olası sonuçlarla bir enum döndürmek, ancak enum'a bir reddi, bir feragat olup olmadığını belirten bir özellik ekleyerek (son kez geçmenize izin vereceğim) veya eğer uygunsa (PASS):
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;
}
}
==> Önem Derecesi.java <==
public enum Severity {
PASS,
WAIVER,
DENIAL;
}
==> Test.java <==
public class Test {
public static void main(String[] args) {
for (LoginResult r: LoginResult.values()){
System.out.println(r + " " +r.getSeverity());
}
}
}
Test.java için her bir Girişin önem derecesini gösteren çıktı
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
Hem numaralandırma değerine hem de önem derecesine göre, oturum oluşturmanın devam edip etmeyeceğine karar verebilirsiniz.
DÜZENLE:
@ T.Sar'ın yorumuna yanıt olarak, önem derecesinin olası değerlerini (OK, WARNING ve ERROR) yerine PASS, WAIVER ve DENIAL olarak değiştirdim. Bu şekilde o (daha önce HATA) bir İnkarı haddi zatında bir hata değildir ve olmamalıdır açıktır mutlaka bir istisna atma çevirmek. Arayan kişi nesneyi inceler ve istisna verip vermemeye karar verir, ancak DENIAL çağrı yapılmasından kaynaklanan geçerli bir sonuç durumudur processLogin(...)
.
- PASS: Devam et, henüz yoksa bir oturum oluştur
- FERAGAT: bu sefer devam et, ama bir dahaki sefere kullanıcının geçmesine izin verilmeyebilir
- DENIAL: üzgünüm, kullanıcı geçemez, oturum oluşturma