Many thanks to Tristan Morris for creating a beautiful illustrated hardcover print edition of the site

tcc-case-title

Учитель Кайму привёл трёх старейших монахов в Зал Бесконечных Кабинок. Там он собрал трёх своих послушников.

“Требуется вспомогательный метод, который принимает идентификатор сотрудника и из него создаёт конкретный URL”, - сказал Кайму. “Логика не очень простая, но в конечном счёте она сводится к замене текста”.

Кайму указал на первого монаха. “Этот работает на уровне хранения данных, где все ключи баз данных представлены в виде больших целых чисел. Понятно его желание, чтобы параметр метода был типа Long”.

Кайму указал на второго монаха. “Этот работает на уровне бизнес-логики, которая использует строгую типизацию. Он хочет, чтобы параметр метода был типа EmployeeID”.

Кайму указал на третьего монаха. “Этот работает на веб-уровне, где все данные обрабатываются в текстовом виде. Он хочет, чтобы параметр метода был типа String”.

Затем учитель поклонился трём монахам и велел послушникам предложить свои решения.

- - -

Первый послушник встал. “Метод должен принимать String, который будет более полезен в самом методе. Те монахи, которые предпочитают Long или EmployeeID, могут легко вызвать метод toString у этих объектов и передать результат в наш метод”.

Сказал Кайму: “Когда нищий, сидящий на корточках в грязи, попросит у вас мелочь, Вы вполне можете потребовать, чтобы он поднял чашу к Вам поближе. Но как быть с человеком без рук?”

Перед тем, как первый послушник смог ответить, поднялся второй. “Кажущаяся простота вызова метода toString усложняется необходимостью проверки на null перед вызовом. Следовательно, наш метод должен принимать Object, который включает в себя любой из трех типов. Тогда сам метод может проверить на null и вызывать toString только тогда, когда это безопасно. Таким образом, ничего не потребуется от вызывающего”.

Кайму сказал: “Зная, что безрукий нищий может потреблять только то, что находится у него во рту, Вы милосердно ходите везде с рисом в карманах. И Вы бросаете ваши зёрна в рот любому. Как же хорошо Вы делаете крысам и сорокам!”

Встал третий послушник. “Три монаха, три послушника. Почему бы не использовать три метода, каждый из которых принимает разный тип? EmployeeID, Long и String. Первый и второй могут вызывать третий, и каждый из них пусть проверяет на нуль”.

Кайму сказал: “Не корм для крыс, но каким же жирным должен быть нищий! А если метод принимает четыре параметра, Вы напишете восемьдесят один вариант? Вы потратите столько времени, чтобы всех удовлетворить, что Вам уже никто не поможет”.

Затем Кайму велел старшим монахам уйти, чтобы послушники смогли определить для себя лучший способ удовлетворения всех запросов.

- - -

Как только они вышли, первый монах прошептал: “Как вы думаете, какой подход будет выбран?”

Второй монах ответил: “Если они похожи на нас, то это будет подход послушника, который кричит громче всех”.

Третий монах кивнул. “Несомненно, некоторые из нас будут придираться к решению, но мы будем его соблюдать, хотя без особого желания, и мир будет продолжать вращаться. Вот так и получается:: мы все друг перед другом нищие”.