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

tcc-case-title

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

“Если я захочу узнать платёжный адрес клиента”, - сказал первый монах, - “то у класса Customer должен быть метод getBillingAddress, так же как у него есть метод getName! Как можно отрицать элегантность моего дизайна?”

“Так как этот метод молча загружает адрес из базы данных!” - возразил второй. “Это не шаблон для объектов значений! Только они предназначены для хранения данных, получаемые через DAO. Надо завести класс AddressDAO для обращения к таблице адресов, используя метод Service. Платёжный адрес должен быть получен непосредственно оттуда”.

“Но мы потеряли Объектно-Ориентированный Путь!” - крикнул первый. “Неужели мы сделаем полный оборот и вернёмся во времена языка C? Наши объекты значений немногим лучше структур, наши статические DAO и Service являются лишь коллекциями связанных функций и мы передаём идентификаторы вместо объектов, которые они представляют! Следует ли нам в следующий раз бегать на четвереньках и выть на Луну?”

Two nuns watching the fight
Wow... a roundhouse kick right to the copy constructor.

“Путь Корпоративных Шаблонов Проектирования является движением к идеальной простоте, а не возвратом к примитивизму!”, - сказал второй. “Доменный объект предназначен для работы в качестве его тёзки не больше, чем изображение лопаты предназначено для рытья канавы! Следует отложить в сторону внешний вид и сосредоточиться на цели!”

“Цель неотъемлема от выбранного имени!” - сказал первый. “Доменные объекты должны моделировать реальный мир!”

Второй монах ответил кулаком в живот первого монаха, согнув его. “Скажи мне,” - сказал второй монах, - “в какой переменной экземпляра я ударил тебя?”

Первый монах прыгнул вперёд и двинул в ухо сопернику. “А я-то думал, что эти придатки для того, чтобы слушать!”, - сказал первый, а второй пошатнулся от боли. “Какое счастье, что я отложил в сторону внешний вид и обнаружил их истинное назначение!” Его злорадство было прервано апперкотом в челюсть.

Молодая монахиня (послушница) заметила несколько учителей Java на краю толпы, молча наблюдавших за происходящим. Она подбежала к ним.

“Два монаха ещё долго будут убивать друг друга!”, - сказала послушница. “Почему бы вам не разрешить их спор и не сказать нам, чья философия лучше?”

Учителя проигнорировали её. Но монахиня Жинг услышала и прошептала послушнице:

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

“Вы хотите сказать, что учителя намерены скрыть от нас ответ?” - спросила послушница.

“Фу”, - сказала Жинг. “Если бы я была монахом, который предпочитает Объектно-Ориентированный Путь, я хотела бы обратить твоё внимание на Ненаписанную Иерархию, в которой Учитель является подклассом Ученика”.