У нас есть несколько функций, которые следуют очень похожим образцам:
- Пользователь отправляет адрес электронной почты
- Пользователь получает письмо с секретным кодом
- Пользователь возвращает секретный код ввыполнить безопасное действие
Например, наша функция регистрации / регистрации следует этому шаблону.Пользователь отправляет адрес электронной почты, получает электронную почту, а затем использует секретный код для создания пароля и учетной записи пользователя.Другой пример - сброс пароля.Пользователь отправляет адрес электронной почты, получает электронную почту, затем использует секретный код для изменения пароля и доступа к учетной записи пользователя.
Pattern # 1
У нас может быть 1 контроллер, который управляет каждой функциейиндивидуально.Так, например, SignUpController, который обрабатывает все связанные действия (отправка электронной почты, выкуп кода и создание пароля).Тогда у нас может быть PasswordResetController, который также обрабатывает отправку электронной почты, выкуп кода и изменение пароля.
Pattern # 2
Альтернативой может бытьдействия распределяются по контроллерам.В этом шаблоне у нас будет SendEmailController, который будет отправлять электронные письма для обеих функций, CodeRedemptionController, который будет обрабатывать погашения кода для обеих функций, и PasswordController, который будет обрабатывать операции с паролями для обеих функций.
Какой подход лучше и почему?Нашей основной целью является достижение высокой простоты кода, ясности / открытости и СУХОСТИ.Я вижу преимущества и недостатки обеих моделей.
Преимущества Pattern # 1
Весь код, относящийся к этой функции, хранится в одном месте.Передача данных из одного действия в другое с использованием словаря TempData проще для понимания, а последовательность функций описывается одним контроллером.
Недостатки Pattern # 1
Внедрение зависимости.Каждому контроллеру функций потребуются зависимости, введенные для отправителя электронной почты, менеджера учетных записей (интерфейсной оболочки MembershipProvider), а также различных репозиториев.При использовании инжектора конструктора у конструктора будет много аргументов.
Преимущества и недостатки Pattern # 2 будут противоположны.Мы могли бы упростить зависимости для контроллеров, но функции могли бы быть распределены по нескольким контроллерам, размывая ясность того, какие функции пытается достичь приложение в целом.