Я пытаюсь реализовать базовый аудит для системы, в которой пользователи могут входить в систему, менять свои пароли, адреса электронной почты и т. д.
Все функции, которые я хочу проверить, находятся на бизнес-уровне, и я хотел бы создать объект аудита, в котором хранится дата и время вызова функции, включая результат.
Недавно я посетил конференцию, и одна из сессий была посвящена хорошо продуманным веб-приложениям, и я пытаюсь реализовать некоторые идеи. В основном я использую Enum для возврата результата функции и использую оператор switch для обновления пользовательского интерфейса на этом уровне. Функции используют ранний возврат, который не оставляет времени для создания, настройки и сохранения аудита.
Мой вопрос заключается в том, какие подходы используют другие при аудите бизнес-функций, и какой подход вы бы выбрали, если бы у вас была функция, подобная моей (если вы скажете, бросьте ее, я выслушаю, но я буду сварливым).
Код выглядит примерно так:
function Login(string username, string password)
{
User user = repo.getUser(username, password);
if (user.failLogic1) { return failLogic1Enum; }
if (user.failLogic2) { return failLogic2Enum; }
if (user.failLogic3) { return failLogic3Enum; }
if (user.failLogic4) { return failLogic4Enum; }
user.AddAudit(new (Audit(AuditTypeEnum LoginSuccess));
user.Save();
return successEnum;
}
Я мог бы расширить операторы if, чтобы создать новый аудит в каждом из них, но тогда функция начинает запутываться. Я мог бы провести аудит на уровне пользовательского интерфейса в операторе switch, но это кажется неправильным.
Действительно ли плохо вставлять все это в try catch с finally и использовать finally для создания объекта аудита и установки его информации, таким образом решая проблему раннего возврата? У меня сложилось впечатление, что a finally предназначен для очистки, а не для одитинга.
Меня зовут Дэвид, и я просто пытаюсь стать лучше. Спасибо.