Возможно, это не простейшее решение для реализации, но вы можете изучить использование Aspect Oriented Programming. Затем вы можете аннотировать каждый метод, который требует входа пользователя в систему. Это делает код чистым и читаемым.
[ConfirmUser(ErrorMethod=... RequireUsername=false, RequirePassword=true)]
public void ViewData()
{
// your code
}
Структура AOP будет сплетаться в требуемом коде для обработки подтверждения пользователя в вашем методе.
Или сделать то же самое внутри методов вручную:
public void ViewData()
{
ConfirmUser();
// your code
}
public void ConfirmUser()
{
if(!DoLoginPage()) throw new SecurityException("Incorrect credentials");
}
Вы могли бы ConfirmUser возвращать логическое значение вместо исключения. Это еще одно обсуждение и зависит от вашего приложения. Если вы отказываетесь от операций в более низких слоях кода, исключение - путь. Попробуйте/поймать, чтобы вы поместили обработку ошибок в нижней части функции, в то время как возвращаемый bool требует и если оператор сверху.
public void ViewData()
{
try
{
ConfirmUser();
// your code
}
catch(SecurityException)
{
//handle error
}
}
против
public void ViewData()
{
if(!ConfirmUser())
{
//handle error
return;
}
// your code
}
Вы могли бы реализовать как ConfirmUser и ConfirmPassword, или оба в тот же метод с параметром, возможно перечисление сказать, что вам нужно проверить.
[Flags]
public enum Requires
{
Username,
Password
}
public bool ConfirmUser(Requires requiresField)
{
}