Похоже, это не имеет ничего общего с диаграммами действий.Ваша новая формулировка ясна: 5 попыток в одной форме или одна попытка в каждой из пяти форм неверна, поэтому User_Account :: failedAttempts (а не login :: попытки) является разумной особенностью модели.
Ограничение:чаще всего определяется как верхняя граница 5 в User_Account :: failedAttempts.Обратите внимание, что ограничение определяет, что действительно, а не как реагировать на недействительность.Вы могли бы более использовать инвариант к верхнему пределу против вычисленного значения MaximumAttempts ().Вы могли бы непреднамеренно использовать предварительные / постусловия в операциях или просто связать свои операции управления.
Вы могли бы иметь разумно иметь операцию User_Account :: isLocked (), тело которой не удалось.Деятельность обеспечивает контроль для модели.Предположительно у него есть спасательный круг, связанный с созданием / уничтожением логина.Предположительно он использует операцию DataBase :: checkPassword (userName, password), которая возвращает User_Account и увеличивает User_Account :: failedAttempts в качестве побочного эффекта.Поэтому применение максимума осуществляется в User_Account :: checkPassword.(Обратите внимание, что вы не должны делать двухэтапный доступ для поиска User_Account, а затем проверки пароля, чтобы гарантировать, что хакеры не смогут различить, возможно, просто по времени ответа, произошел ли сбой из-за неверного имени пользователя или неверного пароля.)
Вам нужночетко определить, что находится в модели;что сохраняется в течение всей вашей системы, возможно, восстанавливается из резервной копии после перезагрузки системы.Следовательно, User_Account должен иметь свойства username и password и failedAttempts для определения постоянного состояния.
И наоборот, то, что является частью View / Control, может быть потеряно и воссоздано при инициировании другого взаимодействия с пользователем.Таким образом, форма входа в систему также имеет свойства имени пользователя и пароля для представления того, что вводится в форму и что будет связано с базой данных модели, возможно, с помощью DataBase :: getUserAccount и UserAccount :: checkPassword.
Я бы не загрязнялпостоянная модель базы данных с временным содержимым входа в систему.Если вам требуется воссоздание попыток входа в систему при сбое сервера, у меня будет отдельная ViewDataBase переходного состояния просмотра.В противном случае вы бы восстановили сбой сервера, повторно активировав постоянную базу данных, прежде чем активировать переходные действия.