Нарушение функции SELECT
Wednesday, 30 November 2011 12:56![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Возьмём типичнейшую программу: база данных и пользовательский интерфейс к ней. Каким ошибкам программирования соответствуют классические гештальтистские способы прерывания контакта?
Конфлюэнция. База данных состоит из сотен таблиц с именами вида T001, T002, T003 и так далее. В каждой таблице - десятки полей с именами F01, F02, F03... все поля одного типа - строковые. В них записаны какие-то числа и слова. Связей нет. Определить главные и связанные таблицы невозможно, как выбрать хоть что-то вразумительное - непонятно. До написания программы дело не доходит.
Интроекция. Всякий раз, когда программе нужна пара значений из базы, она делает "SELECT *" без условий, закачивает в себя мегабайты записей, раздувается и медленно их перебирает. Часто ошибается и берёт данные не из той записи, потому что не ожидает, что их там может быть несколько.
Проекция. Программа хранит в базе не только данные, но и свои настройки, описания окон и скрипты бизнес-логики, которые вычитываются и исполняются в клиенте. Любые глюки объясняются фразой: "Опять база поломалась!"
Дефлексия. В программу встроена модель данных, не вполне совпадающая с реальным содержимым базы. Но все исключения при работе с данными немедленно глушатся, а в объекты подставляются какие-нибудь автоматически подобранные значения. Пользователь весьма смутно догадывается о том, насколько то, что он видит, не соответствует истине.
Ретрофлексия. Неожиданности в данных программа трактует как критичные ошибки кода. При любом несоответствии падает. Избегает сохранять данные в базу, предпочитая запоминать всё в многочисленных локальных переменных и скрытых полях форм.
Профлексия. Хранимые процедуры составлены по всем правилам программирования - с перехватчиками исключений, протоколированием, множеством подпрограмм и функций, элементами объектного подхода. Это всё довольно сложно в отладке и притормаживает. Код программы при этом слеплен кое-как.
Эготизм. Программа работает безупречно, за исключением одной мелочи: в начале сеанса работы открывает одну большую общую транзакцию (на всякий случай, чтобы всё было максимально надёжно и безопасно), а при завершении не подтверждает эту транзакцию, а откатывает. Никаких следов работы в базе не остаётся.
Конфлюэнция. База данных состоит из сотен таблиц с именами вида T001, T002, T003 и так далее. В каждой таблице - десятки полей с именами F01, F02, F03... все поля одного типа - строковые. В них записаны какие-то числа и слова. Связей нет. Определить главные и связанные таблицы невозможно, как выбрать хоть что-то вразумительное - непонятно. До написания программы дело не доходит.
Интроекция. Всякий раз, когда программе нужна пара значений из базы, она делает "SELECT *" без условий, закачивает в себя мегабайты записей, раздувается и медленно их перебирает. Часто ошибается и берёт данные не из той записи, потому что не ожидает, что их там может быть несколько.
Проекция. Программа хранит в базе не только данные, но и свои настройки, описания окон и скрипты бизнес-логики, которые вычитываются и исполняются в клиенте. Любые глюки объясняются фразой: "Опять база поломалась!"
Дефлексия. В программу встроена модель данных, не вполне совпадающая с реальным содержимым базы. Но все исключения при работе с данными немедленно глушатся, а в объекты подставляются какие-нибудь автоматически подобранные значения. Пользователь весьма смутно догадывается о том, насколько то, что он видит, не соответствует истине.
Ретрофлексия. Неожиданности в данных программа трактует как критичные ошибки кода. При любом несоответствии падает. Избегает сохранять данные в базу, предпочитая запоминать всё в многочисленных локальных переменных и скрытых полях форм.
Профлексия. Хранимые процедуры составлены по всем правилам программирования - с перехватчиками исключений, протоколированием, множеством подпрограмм и функций, элементами объектного подхода. Это всё довольно сложно в отладке и притормаживает. Код программы при этом слеплен кое-как.
Эготизм. Программа работает безупречно, за исключением одной мелочи: в начале сеанса работы открывает одну большую общую транзакцию (на всякий случай, чтобы всё было максимально надёжно и безопасно), а при завершении не подтверждает эту транзакцию, а откатывает. Никаких следов работы в базе не остаётся.