Many thanks to Tristan Morris for creating a beautiful illustrated hardcover print edition of the site |
|||||||||||||
Монаху Джишину была поставлена задача по созданию веб-страницы для запросов к системной таблице по инвентаризации мешков риса. Мрачно размышляя о предстоящем скучном рабочем дне, монах внезапно вдохновился: “Я должен разработать объект уровня представления для параметров из формы поиска”, - подумал он, - “а также объект сервисного уровня для каждой строки, возвращаемой в процессе поиска. Но эти объекты должны иметь те же атрибуты, что и объект МешокРиса, который сейчас используется для создания новых строк таблицы. Не могу ли я просто переиспользовать объект уровня базы данных для обеих целей?” С растущим волнением он подумал: “Если бы объект уровня базы данных был бы аннотирован соответствующим образом, я бы мог разработать фреймворк, получающий форму ввода данных, проверяющий её, преобразующий в SQL, делающий запрос в базу данных и предсталяющий пользователю результаты поиска в табличном формате... всё это потребует самых минимальных усилий со стороны пользователя!” Так, в течение следующих нескольких дней монах счастливо разрабатывал фреймворк, используя страницу поиска МешокРиса в качестве доказательства правильности концепции. В конце недели Джишин с гордостью показал плоды своего труда учителю Банзену. Учитель изучил фреймворк, кивнул и приказал Джишину переделать семь существующих страниц поиска в приложении, начиная со страницы Воин, таким образом, чтобы все они использовали новый фреймворк. После того, как монах побежал выполнять задание, к Банзену подошла монахиня, стоявшая неподалеку. “Учитель”, - спросила монахиня, - “Объект Воин содержит единственное значение состояния. Если пользовательский запрос будет представлен одним объектом Воин, то как мы сможем запросить всех воинов, состояние которых либо пропал без вести, либо в отставке, либо мёртв?” “Никак”, - сказал Банзен. “Кроме того”, - продолжила монахиня, - “Объект Воин содержит только информацию, хранящуюся в таблице Воин. Как же мы сможем найти воинов по типу оружия, которое они они используют, или по названию полка, в котором они служили, ведь это требует присоединения дочерних таблиц?” “Никак”, - сказал Банзен. Учитель взял из банки, стоявшей на его столе, небольшой тёмный кусок и передал его озадаченной монахине. “Жил когда-то монах, который устал от риса. Однажды он наткнулся на искусство создания куро сато - чёрных леденцов. Каждый день в течение многих лет он грыз кусок за куском, постепенно становясь дряблым, бледным и с дырявыми зубами. В чём заключается ошибка его учителя?” “Не смог запретить конфеты”, - сказала монахиня. Банзен покачал головой и толкнул тяжелую банку через стол. “Съешь их до завтрашнего вечера”, - приказал Банзен, - “и тогда поймёшь суть наказания Джишина”. Перевод Sergey Malenkov. Отрывок из The Codeless Code, созданная Qi (qi@thecodelesscode.com). При условии, в соответствии с условиями Creative Commons Attribution-NonCommercial 3.0 Unported License. |