Перенаправление - это более простой способ обработки разных страниц в зависимости от роли.Фильтр может использоваться просто для аутентификации, чтобы получить объект User и любые связанные роли в сеансе.
Как сказал Джеймс Блэк, если бы у вас был центральный контроллер, вы могли бы избавиться от необходимости помещать эту логику в фильтры.Для этого вы должны сопоставить центральный контроллер со всеми URL-адресами (или со всеми нестатическими URL-адресами).Затем фильтр передает пользователя и роли на центральный контроллер, который решает, куда отправить пользователя.Если пользователь пытается получить доступ к URL-адресу, для которого у него нет разрешения, этот контроллер может решить, что с этим делать.
Большинство основных веб-сред MVC следуют этому шаблону, поэтому просто ознакомьтесь с ними для лучшего понимания.об этом.
Я тоже согласен с Джеймсом - у вас нет , чтобы переместить все туда, но это может упростить ситуацию в будущем.Лично я думаю, что вам часто приходится торговать этим, чтобы эффективно работать с дизайнерами.Я часто использовал инфраструктуру и логику, чтобы заставить ее работать, но потом замусорил мои шаблоны статическим текстом, работая с дизайнерами.Наконец, вернулся и вытащил весь статический текст во внешние файлы.Конечно же, нашли некоторые ошибки правописания таким образом!
Тестирование - это большая ошибка.По моему опыту, очень дисциплинированный подход, основанный на тестировании, может устранить 90% стресса при разработке этих приложений.Но юнит-тестов недостаточно.
Я использую три вида тестов, как указано сообществом Agile:
- приемочные / функциональные тесты - заказчик определяет их с каждым требованием, и мыне отправляйте, пока они не пройдут все (смотрите FitNesse, Selenium, Mercury)
- интеграционные тесты - убедитесь, что логика верна и что проблемы не сталкиваются между уровнями или с реалистичными данными (посмотрите на Cactus, DBUnit, Canoo WebTest)
- модульные тесты - как определяет использование и ожидания класса, так и обеспечивает уверенность в том, что критические изменения будут быстро обнаружены (см. JUnit, TestNG)
Итак, вы видите, что модульное тестирование действительно на пользу разработчикам ... если над проектом работают пятеро из нас, не написание модульных тестов приводит к одной из двух вещей:
- взрыв необходимых коммуникаций, поскольку разработчики пытаются выяснить, как использовать (или как кто-то нарушил) классы друг друга
- нет связии повышенный риск из-за «бункеров» - областей, где только один разработчик касается кода и в котором компания полностью зависит от этого разработчика
Даже если это только я, слишком легко забыть почемуЯ поместил этот маленький кусочек особой логики в класс шесть месяцев назад.Затем я нарушаю свой собственный код и должен выяснить, как ... это большая трата времени и ничего не делает для снижения уровня стресса!Кроме того, если вы заставите себя продумать (и напечатать) тест для каждой важной функции в своем классе и выяснить, как изолировать любые внешние ресурсы, чтобы вы могли передать имитирующую версию, ваш дизайн неизмеримо улучшится.Поэтому я склонен работать в первую очередь на тестировании.
Пожалуй, наиболее полезным, но менее часто выполняемым, является автоматическое приемочное тестирование.Это то, что гарантирует, что разработчики поняли, о чем просил клиент.Иногда это остается за QA, и я думаю, что это нормально, но идеальная ситуация - та, в которой они являются неотъемлемой частью процесса разработки.
Это работает так: для каждого требования план тестирования превращается в сценарий, который добавляется в набор тестов.Тогда вы смотрите, как это не удается.Затем вы пишете код, чтобы он прошел.Таким образом, если кодировщик работает над изменениями и готов к регистрации, он должен выполнить чистую сборку и выполнить все приемочные тесты.Если что-то не получилось, исправьте, прежде чем вы сможете зарегистрироваться.
«Непрерывная интеграция» - это просто процесс автоматизации этого шага - когда кто-нибудь регистрирует код, отдельный сервер проверяет код и запускает все тесты. Если какие-либо из них были повреждены, он спамит последним застройщиком, пока они не будут исправлены.
Однажды я консультировался с командой, у которой был один тестер. Этот парень работал над планами испытаний вручную, целый день. Когда произошли изменения, какими бы незначительными они ни были, ему придется начинать все сначала. Я построил для них электронную таблицу, в которой указывалось, что на одном экране было более 16 миллионов возможных путей, и они потратили 10 тысяч долларов на Mercury Test Director в спешке! Теперь он составляет электронные таблицы и автоматизирует планы тестирования, в которых они используются, поэтому они проводят довольно тщательное регрессионное тестирование без постоянно растущих временных требований.
Как только вы начали автоматизировать тесты на каждом уровне вашего приложения (особенно если вы работаете в тестовом режиме), происходит удивительная вещь. Беспокойство исчезает!
Так что нет, это не обязательно. Но если вы беспокоитесь о техническом долге, о большом развертывании в эти выходные или о том, собираетесь ли вы что-то сломать, пытаясь быстро измениться, чтобы удовлетворить внезапно возникающие потребности клиентов, вы можете более тщательно исследовать Первая разработка.