Я пытаюсь внедрить базовый аудит для системы, в которой пользователи могут войти в систему, изменить свои пароли, электронную почту и т. Д.
Все функции, которые я хочу проверять, находятся на бизнес-уровне, и я хотел бы создатьобъект Audit, в котором хранится дата и время, когда была вызвана функция, включая результат.
Недавно я присутствовал на конференции, и одна из сессий была посвящена хорошо продуманным веб-приложениям, и я пытаюсь реализовать некоторые идеи.По сути, я использую Enum для возврата результата функции и использую инструкцию switch для обновления пользовательского интерфейса в этом слое.Функции используют ранний возврат, который не оставляет времени для создания, настройки и сохранения аудита.
Мой вопрос заключается в том, какие подходы используют другие при аудите бизнес-функций, и какой подход вы бы использовали, если бы у вас была такая функция, как у меня (если вы скажете, что я ее слушаю, я выслушаю, но буду раздражительным).1007 *
Код выглядит примерно так:
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 для создания объекта Audit и установки егоинформация там, таким образом, решая проблему раннего возвращения?У меня сложилось впечатление, что наконец-то для очистки, а не одитинга.
Меня зовут Дэвид, и я просто пытаюсь быть лучшим кодом.Спасибо.