Руководство компании Дэвида не очень доверяло традиционной производственной последовательности отправить/пересобрать/развернуть. По их ощущениям, для этого требовалось слишком много шагов, и прорва времени. Организации требовалось внедрять изменения — в частности исправления ошибок — гораздо быстрее. Поэтому для решения проблемы они внимательно изучили процесс разработки, и аккуратно внесли в него необходимые изменения. Шучу. На самом деле они решили внедрить инновационную методику - «SQL Предложения».
Начальники пришли к выводу, что, так как большая часть их приложения манипулировала данными в базе данных, то большинство багов возникает в результате неправильных SQL запросов. Скорее всего, там было что-то вроде использования LEFT JOIN вместо INNER JOIN, или > вместо >=. Они решили, что раз уж в их приложении уже была база данных, — вы уже поняли к чему все идет — почему бы тогда не хранить все SQL запросы в этой базе данных?
Реализовать задумку поручили ведущему разработчику, который работал денно и нощно, чтобы в результате преобразовать ее в нечто чудовищное: библиотеку «SQL Предложения».
- все SQL запросы до единого должны были храниться в таблице sql_sentences
- чтобы не хардкодить назначение SQL запроса в его идентификаторе, каждому SQL предложению назначался четырехзначный шестнадцатиричный идентификатор - 0x00F9, 0xA004, и т.д. - вместо GET_ALL_CUSTOMERS
- каждому предложению назначались привилегии, метод GetSQLSentence() выполнял несколько других запросов, чтобы убедиться в том, что пользователь имеет право выполнять запрос
- дабы ублажить тех разработчиков, которые выступали против хранения SQL запросов в базе, была добавлена конфигурационная переменная “UseHardcodedSQL”
Чтобы, выполнить все эти требования разработчикам потребовалось изменить свой код примерно следующим образом...
string sql;
// @SQLSentence=0x02f0
if ((bool)(Configuration.GetValue("UseHardcodedSQL")))
{
sql = "SELECT cust_name, cust_phone, cust_addr " +
" FROM customers WHERE cust_type='Active'";
}
else
{
sql = DataConnector.GetSQLSentence(0x02f0);
}
... ну и, разумеется, дополнительно требовалось добавить этот же запрос в таблицу sql_sentences. А если в запрос надо внести изменения, то вносить их надо и в код и в гигантский скрипт, который создавал таблицу sql_sentences и в рабочую базу данных.
Так как Дэвид еще не работал в компании, когда внедрялись эти изменения, то, как только он разобрался, что к чему, он спросил у ведущего разработчика, не доводилось ли ему когда-нибудь слышать о хранимых процедурах?
«Ага», ответил он, «но я еще слышал, что их чертовски трудно сопровождать».
Оригинал:http://thedailywtf.com/Articles/SQL-Sentences.aspx
Перевод:Евгений Виговский