metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-08-11 10:19 am

А вот теперь пример безумия

В мире жабы(в смысле языка програмирования) есть какая-то тонкая шиза, которая порождает миллиарды фреймворков.
Вот пример про логгирование. Ну блин, как можно столько наворотить на пустом месте?

Самая хохма там - это то, что некоторые упоминают использование логгеров через дополнительный уровень абстракции. Мне иногда для вывода в текстовый лог и на экран юзеру приходится делать обвязку, дословно дублирующую интерфейс логгера, и меня это напрягает, потому что это натурально тупая копипаста. А народ такое массово использует и не парится.

По-моему, избавление от шизы надо начать с сжигания GoF и фаулера на костре из их книжек. А затем внедрять в мейнстримные языки всякую функциональщину, вроде функций высшего порядка, каррирования и вывода типов, после чего половина врапперов, фасадов и прочего копипастного мрака становится не нужна.

[identity profile] volodymir-k.livejournal.com 2009-08-11 10:37 am (UTC)(link)
> там же половина советов сводится к "имитируйте функциональное программирование

- Таких цитат там нету
- Если Вы думаете, что они Неявно Намекают, то... авторство этой идеи, боюсь, не их.


Хотелось бы пример, каким образом ActiveRecord vs Table Data Gateway имеет отношение к "функциональщине".

[identity profile] mr-aleph.livejournal.com 2009-08-11 10:47 am (UTC)(link)
ну за 10-то лет можно и забыть, что GoF постулируют свою книгу, как неисчерпывающий каталог паттернов, построенный на основе анализа существовавшего на тот момент программного обеспечения (а вовсе не как открытие), причем выбор из этого каталога должен производится после тщательного анализа и взвешивания всех за и против...

Я вот пролистал введение и там написано:


Никакое обсуждение того, как пользоваться паттернами проектирования, нельзя считать полным, если не сказать о том, как не надо их применять. Нередко за гибкость и простоту изменения, которые дают паттерны, приходится платить усложнением дизайна и ухудшением производительности. Паттерн проектирования стоит применять, только когда дополнительная гибкость действительно необходима. Для оценки достоинств и недостатков паттерна большую помощь могут оказать разделы каталога «Результаты».


занятно, неправда ли?

[identity profile] theiced.livejournal.com 2009-08-11 10:50 am (UTC)(link)
ActiveRecord - это паттерн? охренеть.

[identity profile] metaclass.livejournal.com 2009-08-11 10:52 am (UTC)(link)
Тем образом, что и то, и другое - способы обскакать на кривой козе фундаментальную проблему - импеданс между базой и приложением.

Если бы приложение автоматически выводилось из базы, или база автоматически выводилась из приложений - то не нужно было плясать с бубном, выбирая "как бы нам лучше их связать".

Смех в том, что я Table Data Gateway реализовывал по меньшей мере десяток раз, а название(и то, что у этого метода вообще есть название) узнал только сегодня. Это хорошо демонстрирует необходимость оных паттернов.

[identity profile] metaclass.livejournal.com 2009-08-11 10:52 am (UTC)(link)
Да, это же известное дело.

[identity profile] dmzlj.livejournal.com 2009-08-11 10:55 am (UTC)(link)
Я не то, что бы всерьез считаю, что их читать совсем не стоит. Их читать не стоит неокрепшим умам, которых, к сожалению, весьма много. Важно ведь не то, что они пишут, а как воспринимают читатели. Относиться к тому, что они пишут нужно сильно критично, опираясь на свой опыт. Который должен быть. Т.е не знать их плохо, но не знать ничего кроме них тоже плохо. В общем, я вреда от них наблюдал больше, чем пользы.

Вообще же, мне подход GoF кажется концептуалньно неверным, но вот прямо сейчас эту тему я развивать не берусь.

[identity profile] dmzlj.livejournal.com 2009-08-11 10:56 am (UTC)(link)
Да ладно, сингтон паттерн, вот где умора то. И там еще были какие-то такие смешные, типа сингтона, но сейчас не вспомню.

[identity profile] dmzlj.livejournal.com 2009-08-11 10:57 am (UTC)(link)
синглтон, блин. еда под кнопку 'л' завалилась.

[identity profile] theiced.livejournal.com 2009-08-11 11:00 am (UTC)(link)
ну я тупой в вопросах паттернов, тоже дело известное ;]

[identity profile] theiced.livejournal.com 2009-08-11 11:00 am (UTC)(link)
охренеть ещё раз ;]

[identity profile] theiced.livejournal.com 2009-08-11 11:00 am (UTC)(link)
дайте догадаюсь - factory - они тоже паттерны, да?

[identity profile] dmzlj.livejournal.com 2009-08-11 11:01 am (UTC)(link)
Это само собой. Еще там callback паттерн. Причем, по моему там несколько паттернов, которые на самом деле представляют собой коллбеки.

[identity profile] metaclass.livejournal.com 2009-08-11 11:02 am (UTC)(link)
Синглетон это вообще смерть известная.

[identity profile] metaclass.livejournal.com 2009-08-11 11:03 am (UTC)(link)
Ты издеваешся что ле?:)
Я так понимаю, тут даже само название общепринятое от кого-то из этих отцов-паттерно-основателей идет.

[identity profile] metaclass.livejournal.com 2009-08-11 11:05 am (UTC)(link)
Да, кстати, там некоторые паттерны друг от друга отличаются очень слабо, такие отличия пригодны скорее, чтобы на собеседованиях разработчиков заваливать.
Типа "а вот чем отличается прокси, фасад и враппер паттерны?"

[identity profile] theiced.livejournal.com 2009-08-11 11:06 am (UTC)(link)
не издеваюсь - ну фактори и фактори - фигли там. оказывается паааааттерн.

итить.

[identity profile] guamoka.livejournal.com 2009-08-11 12:25 pm (UTC)(link)
Ребе, дело в том, что применение либо не применение паттернов не решают проблемы с головой у разработчика. Поэтому, что с фп, что с паттернами будет результат как со стеклянныс куем:) Кстати, было бы любопытно глянуть на промышленный логгер реализованый на фп языке:) Я думаю, мощь этой травы просто слабо оценна в виду узости целевой аудитории. Может оказаться, что в фп считается удобным- это всего лишь через жопу левой рукой в отличие через жопу правой как в жаббе.

[identity profile] volodymir-k.livejournal.com 2009-08-11 12:40 pm (UTC)(link)
> способы обскакать на кривой козе фундаментальную проблему - импеданс между базой и приложением

В чём импеданс-то? Что есть detached объекты? Вот уж "фундаментальная проблема"-то.

Ну писали в 1994-1996 люди году на Oracle 4GL (PL SQL + Reports) -- никакого импеданса не было. Чего не хотите?

> Если бы приложение автоматически выводилось из базы - то не нужно было плясать с бубном, выбирая "как бы нам лучше их связать".

???
Никто и не пляшет. Разные классы приложений требуют разные способы и уровни "связки", которые уже изобретены и описаны.

Замечу, что "вывод приложения" и "вывод DAO слоя" это немного разные вещи. Очевидно, что если приложение не состоит из одной БД, то его "вывести" и невозможно. А "вывод DAO слоя из БД" решена десятки раз, от hibernate-tools до scaffold.

Чувствуется, что Вы чего-то хотите, сами не знаете чего.

[identity profile] blacklion.livejournal.com 2009-08-11 12:41 pm (UTC)(link)
Александреску — виртуоз. Это практически мало применимо, а вот GoF — Каталог уже сделанного в реальных задачах.

[identity profile] blacklion.livejournal.com 2009-08-11 12:41 pm (UTC)(link)
О! Я вот в ней был разочарован очень — потому что не увидел ничего нового, читал поздно :)

[identity profile] volodymir-k.livejournal.com 2009-08-11 12:45 pm (UTC)(link)
А вот Вам на закуску пример функицонального программирования:

quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)

как насчёт возможных ошибок?

[identity profile] dmzlj.livejournal.com 2009-08-11 12:52 pm (UTC)(link)
Брейнфак императивный, например. И что? Те кто знает этот язык - поймут что здесь. Те кто не знает - поймут на тех языках, которые знают.

[identity profile] metaclass.livejournal.com 2009-08-11 01:23 pm (UTC)(link)
Я думаю, что если на Haskell писать реальный проект, которому нужны логгеры - привлекательность резко потеряется, т.к. логгирование это априори побочные эффекты, а для них нужно тащить за собой IO :)

[identity profile] volodymir-k.livejournal.com 2009-08-11 02:25 pm (UTC)(link)
Дык J -- язык серьёзный, на нём реально пишут для бизнеса за бабло.

[identity profile] dmzlj.livejournal.com 2009-08-11 03:22 pm (UTC)(link)
Ну и отлично. Я не сомневаюсь что там все +- ок, если бы я его знал, то наверное смог бы сказать, что там с кодом.

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

На haskell реализация этого quicksort-like алгоритма может выглядеть очень выразительно. Даже для тех, кто не знает языка.

Page 2 of 4