Я думаю, что одним из худших анти-паттернов, которые я видел, является использование таблицы базы данных в качестве временного хранилища вместо использования памяти компьютера.
Проблемная область является частной собственностью, что не позволяет мне объяснять это, но нет необходимости понимать основную проблему. Это было приложение с графическим интерфейсом, написанное на Java с базой данных. Это должно было взять определенные входные данные, манипулировать ими и затем передать обработанные данные в базу данных.
Наш проект имеет довольно сложный алгоритм, который сохраняет промежуточные значения для последующей обработки. Вместо того, чтобы инкапсулировать временные объекты в ... объектах, была создана таблица базы данных, например, "t_object". Каждый раз, когда значение вычислялось, оно добавлялось в эту таблицу. После того, как алгоритм завершит свою работу, он выберет все промежуточные значения и обработает их все в одном большом объекте Map. После завершения всей обработки оставшиеся значения, помеченные для сохранения, будут добавлены в реальную схему базы данных, а временные записи в таблице "t_object" будут отброшены.
Таблица также использовалась как уникальный список, данные могли существовать только один раз. Это могло бы быть приличной особенностью дизайна, если бы мы реализовали ограничения в таблице, но в итоге мы перебрали всю таблицу, чтобы посмотреть, существуют ли данные или нет. (Нет, мы даже не использовали запросы, которые использовали предложения where с CONTAINS)
Некоторые из проблем, с которыми мы столкнулись из-за этого проекта, были специально отлажены. Приложение было построено для передачи данных, поэтому было бы несколько графических интерфейсов, которые будут обрабатывать данные до того, как они достигнут этого алгоритма. Процесс отладки состоял в том, чтобы обработать контрольный пример, а затем сделать паузу сразу после завершения вышеуказанного раздела. Затем мы запросим базу данных, чтобы увидеть, какие данные содержатся в этой таблице.
Еще одна проблема, которую мы обнаружили, заключалась в том, что данные не были должным образом удалены из этой временной таблицы, что может помешать выполнению в будущем. Мы обнаружили, что это связано с неправильной обработкой исключений и, следовательно, с неправильным завершением работы приложения и удалением данных из таблицы, которой он управлял.
Если бы мы использовали базовый объектно-ориентированный дизайн и сохранили все в памяти, эти проблемы никогда бы не возникли. Во-первых, отладка была бы простой, так как мы могли бы легко установить точки останова в приложении, а затем проверить память в стеке и куче. Во-вторых, при неправильном выходе из приложения, память Java была бы очищена естественным образом, не беспокоясь об удалении ее из базы данных.
ПРИМЕЧАНИЕ: я не говорю, что этот паттерн по своей сути плох, но в этом примере я обнаружил, что он не нужен, когда основных принципов ОО было бы достаточно.
Я не уверен в названии этого анти-паттерна, так как впервые вижу подобное. Какие хорошие имена вы, ребята, можете придумать для этого шаблона?