我有一个登录程序,可能会导致多个结果:
我正在考虑如何设计方法。我看到了这些选项
每种可能性的一种方法(如IsUserActivated,IsUsernameKnown ..)。这似乎违反了“告诉不要问”的原则,我不知道我只是不喜欢它。
为每种可能性抛出自定义异常(如UserNotActivatedException,UserUnknownException ..)。这对我来说似乎也不对。
返回自定义ValidationResult类
返回自定义枚举
想法? : - )
也可以随意编辑主题(和标签)
答案 0 :(得分:9)
我会选择最后一个,你不需要一个完整的课程,一个枚举就够了。
但是,您是否计划告诉用户他们的密码错误?这允许黑客验证他们正在使用正确的登录,只需要找到正确的密码。更安全的选择是始终告诉用户他们的登录失败,而不是指定它是用户名还是密码。
答案 1 :(得分:2)
我会返回一个自定义枚举。这是使用Enums的教科书案例。
正如您希望每个结果在某个时间发生的那样,这些结果并不是意料之外的(即它们是预期的),因此例外只是您不需要的开销。
答案 2 :(得分:0)
如果它只是一个简单的状态,那么我肯定会选择枚举,因为枚举是自我记录的。
答案 3 :(得分:0)
我会回来:
class ValidationResult
{
enum{ not_activated, unknown_user, invalid_password, success} status;
String session_id; // used if the user is valid
}
并称之为:
result = login(userName, password);
if (result.status == success) then
...
只要用户需要与系统交互
,就可以使用会话ID