Здравствуйте, Gangsta, Вы писали:
G>Вот такая задачка. Только не говорите, что функционал лишний. Хотелось бы комментариев по поводу того, как сделать то, что описано выше (а не комментариев в стиле "мне кажется, что ты заморачиваешься, достаточно одной проверки" или "все люди делают по-другому").
С учетом
постаАвтор: GlebZ
Дата: 19.07.07
Глеба рекомендую Вам поступить так:
1. Составить полный перечень операций (на макроуровне), которые должна выполнить система в ответ на действие пользователя по добавлению комментария.
По всей видимости, получится что-то типа этого:
1) Получить комментарий и контекст пользователя.
2) Запросить и получить капчу.
3) Поместить комментарий в базу данных.
4) Вывести сообщение (о том, что комментарий добавлен или, наоборот, не добавлен).
2. Для каждого из этих действий создать по модулю (классу), который действует автономно. У Вас получатся:
Получальщик Комментария
Проверяльщик капчи
Добавляльщик комментария к базе данных
Формировальщик сообщения о результате
Обратите внимание, что это только первичные абстракции. По ходу анализа они могут изменяться и уточняться.
3. Организовать обработку сообщения от пользователя в виде конвеера — когда каждое полученное сообщение проходит последовательно все эти четыре этапа.
Получальщик комментария получает все, что надо, и передает это Проверяльщику капчи. Проверяльщик проверяет, нужно ли запросить капчу, и если нужно, запрашивает ее. Получив ответ от пользователя, передает все полученное Добавляльщику комментария. Добавляльщик проверяет, хватает ли необходимых прав для добавления комментария, и если хватает, то добавляет комментарий к базе данных. Затем все результаты передает Формировальщику результирующего сообщения. Последний формирует сообщение и выдает его пользователю.
Понятно, что коммуникация между этими модулями производится на асинхронной основе.