Я думаю, що одна з найгірших антидіапазонів, яку я бачив, передбачає використання таблиці баз даних як тимчасове сховище замість використання пам'яті комп'ютера.
Домен проблеми є власною, що не дозволяє мені пояснювати її, але не потрібно розуміти основну проблему. Це додаток для графічного інтерфейсу, написане на Java з базовою базою даних. Потрібно було брати певні вхідні дані, маніпулювати ними, а потім фіксувати оброблені дані до бази даних.
Наш проект має досить складний алгоритм, який зберігає проміжні значення для подальшої обробки. Замість інкапсуляції тимчасових об'єктів у ... об’єктах була створена таблиця бази даних на зразок "t_object". Кожен раз, коли було обчислено значення, воно додається до цієї таблиці. Після того, як алгоритм закінчив свою роботу, він вибрав би всі проміжні значення та обробив їх все в одному великому об’єкті Map. Після того, як вся обробка буде завершена, залишилися значення, позначені як збережені, будуть додані до реальної схеми бази даних, а тимчасові записи в таблиці "t_object" будуть викинуті.
Таблиця також використовувалася як унікальний список, дані могли існувати лише один раз. Це, можливо, було б гідною особливістю дизайну, якби ми реалізували обмеження на таблиці, але ми закінчили ітерацію через всю таблицю, щоб побачити, чи існують дані чи ні. (Ні, ми навіть не використовували запити, які використовувались, коли пропозиції з CONTAINS)
Деякі проблеми, з якими ми зіткнулися завдяки цій конструкції, були спеціально налагодженням. Додаток було побудовано для конвеєрних даних, щоб не було декількох графічних інтерфейсів, які попередньо обробляли б дані, перш ніж надходити до цього алгоритму. Процес налагодження повинен був обробити тестовий випадок, а потім зробити паузу відразу після закінчення вищевказаного розділу. Тоді ми б запитали базу даних, щоб побачити, які дані містяться в цій таблиці.
Ще однією проблемою, яку ми виявили, було те, що дані не видаляються належним чином із цієї тимчасової таблиці, що може заважати запуску в майбутньому. Ми виявили, що це сталося через те, що Винятки не обробляються належним чином, і тому програма не виходить належним чином та не видаляє дані в таблиці, над якою вона контролюється.
Якби ми використовували базовий об’єктно-орієнтований дизайн і зберігали все в пам’яті, цих вищезазначених проблем ніколи б не виникло. По-перше, налагодження було б простим, оскільки ми могли легко встановити точки перерв у програмі, а потім перевірити пам'ять у стеку та купі. По-друге, при ненормальному виході з програми пам'ять Java буде очищена природним шляхом, не турбуючись про видалення її з бази даних.
ПРИМІТКА. Я не кажу, що ця закономірність є по суті поганою, але в цьому прикладі я вважаю, що це не є зайвим, коли базові принципи ОО були б достатніми.
Я не впевнений у назві цього анти-шаблону, оскільки це вперше я бачив щось подібне. Якісь хороші імена, які ви, хлопці, можете придумати за цією схемою?