Мне лично не нравится программировать возвращаемые значения / Enum
типы.Чем больше типов возврата у вас есть, тем больше путей вы должны протестировать / использовать.Кроме того, использование исключений для управления потоком является плохой практикой (если вы действительно не можете найти какой-либо другой вариант, но обычно есть лучший вариант).
Истек срок действия пароля не является для меня действительно исключительным.В конце концов, это действительное состояние (в противном случае вы могли бы что-то сделать с паролями, срок действия которых вообще не истекает)напрямую вызывается вызывающим абонентом.
Возможно, что-то подобное:
public class User
{
private DateTime _lastChangeDate;
public Action Validate()
{
if (_lastChangeDate >= DateTime.Now.AddDays(-30))
{
return new Action(() => this.Login());
}
else
{
return new Action(() => this.ChangePassword());
}
}
private void Login()
{
Console.WriteLine("Login");
}
private void ChangePassword()
{
Console.WriteLine("Change Password");
}
}
На стороне вызывающего абонента:
user.Validate().Invoke();