А вот теперь пример безумия
Aug. 11th, 2009 10:19 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В мире жабы(в смысле языка програмирования) есть какая-то тонкая шиза, которая порождает миллиарды фреймворков.
Вот пример про логгирование. Ну блин, как можно столько наворотить на пустом месте?
Самая хохма там - это то, что некоторые упоминают использование логгеров через дополнительный уровень абстракции. Мне иногда для вывода в текстовый лог и на экран юзеру приходится делать обвязку, дословно дублирующую интерфейс логгера, и меня это напрягает, потому что это натурально тупая копипаста. А народ такое массово использует и не парится.
По-моему, избавление от шизы надо начать с сжигания GoF и фаулера на костре из их книжек. А затем внедрять в мейнстримные языки всякую функциональщину, вроде функций высшего порядка, каррирования и вывода типов, после чего половина врапперов, фасадов и прочего копипастного мрака становится не нужна.
Вот пример про логгирование. Ну блин, как можно столько наворотить на пустом месте?
Самая хохма там - это то, что некоторые упоминают использование логгеров через дополнительный уровень абстракции. Мне иногда для вывода в текстовый лог и на экран юзеру приходится делать обвязку, дословно дублирующую интерфейс логгера, и меня это напрягает, потому что это натурально тупая копипаста. А народ такое массово использует и не парится.
По-моему, избавление от шизы надо начать с сжигания GoF и фаулера на костре из их книжек. А затем внедрять в мейнстримные языки всякую функциональщину, вроде функций высшего порядка, каррирования и вывода типов, после чего половина врапперов, фасадов и прочего копипастного мрака становится не нужна.
no subject
Date: 2009-08-11 08:07 am (UTC)no subject
Date: 2009-08-11 08:12 am (UTC)no subject
Date: 2009-08-11 08:37 am (UTC)no subject
Date: 2009-08-11 08:41 am (UTC)Паттерны проектирования, всё такое.
no subject
Date: 2009-08-11 08:44 am (UTC)На пару с Мартином Фаулером это корень
злавсех паттернов, слоев абстракции, фасадов, проксей, врапперов и прочих вещей, которые из проектов делают гирлянды мелких копипастных классов.(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-08-11 08:40 am (UTC)no subject
Date: 2009-08-11 09:58 am (UTC)Но когда проектировщик думает, что задачу надо декомпозировать на паттерны GoF - все, приплыли.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-08-11 09:04 am (UTC)no subject
Date: 2009-08-11 08:40 am (UTC)на костре надо сжигать тех, кто не умеет правильно и к месту эти самые абстракции выделять.
а также тех, кто создаёт языки не позволяющие нормально абстракциями пользоваться...
no subject
Date: 2009-08-11 09:16 am (UTC)Вы, дотнетчики, просто привыкли, что существует Одно Решение от Единственного Источника. И что этот источник на вас плюёт, не желая расширять библиотеки. Ваш log4net не вошёл ведь в стандарт? А у явистов в какой-то форме пошёл.
Фреймворков логгирования не миллион, а три. Ну четыре.
Хотя да, я во многих проектах видел свои обёртки, но они всегда имели свои особенности.
no subject
Date: 2009-08-11 09:21 am (UTC)По-моему, очевидно, что у правильно поставленной задачи не может быть четыре отличающихся правильных решения, а только одно. Четыре решения означают или неправильную постановку задачи, или частные случаи одного правильного решения.
no subject
Date: 2009-08-11 10:21 am (UTC)Нет, неочевидно.
Не хотят люди зачем-то в одной ОС сидеть. Хотят разных ОС.
> проще ж пропихнуть ее в один фреймворк и оно появится у всех
Я эту мысль не понимаю. Если мне (1%) хочется логгировать контекст пользователя, другому (1%) слой кода, а третьему (тоже 1%) описанный в доке "класс сообщения", то никто никуда не пихает, а пишут свои обёртки.
> у правильно поставленной задачи не может быть четыре отличающихся правильных решения
Задач, если Вы не заметили, штук 20. Разных. Почитайте про стоки логов, форматтеры, конфигураторы (особенно NDC), анализаторы, аудит, про адаптивное исправление. Идей много.
И довольно наивно слушать, что существует некий супермозг, который "правильно поставит задачу" на всю историю сразу. Логгинг вообще-то не считался стандартной задачей, скажем с Си нету такого в stdlib. Люди начали писать для себя, другим понравилось, вот и появилась тема.
(no subject)
From:(no subject)
From:no subject
Date: 2009-08-13 08:46 pm (UTC)Любой код, используемый повторно, имеет эту клятую проблему.
Интеграция библиотеки заставляет предполагать о идиомах и парадишмах приложения, которое использует эту библиотеку.
Потому не может существовать "единственного решения" даже в (прости хосподи) визуал байсике.
no subject
Date: 2009-08-11 09:25 am (UTC)"А теперь смотрите, как мы легко и удобно можем сохранить значение типа int в файл: [простыня на три страницы шизобреда]." - это вот у них норма жизни. Я ни разу не утрирую :(
no subject
Date: 2009-08-11 09:59 am (UTC)Впрочем, надеюсь, с уходом на C# мне полегчает...
no subject
Date: 2009-08-11 10:22 am (UTC)no subject
Date: 2009-08-11 10:27 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2009-08-11 10:29 am (UTC)И непонятно, зачем Вы зациклились на функциональщине. Это далеко не серебряная пуля, у неё есть свои проблемы, свои классы ошибок. Самое смешное, что на Западе её пиарят как средство для облегчения multicore, а в русской тусовке -- что Там Вся Правда.
no subject
Date: 2009-08-11 10:34 am (UTC)Я когда читаю фаулера, макконнела и прочих - там же половина советов сводится к "имитируйте функциональное программирование на императивных языках" :)
no subject
Date: 2009-08-11 10:37 am (UTC)- Таких цитат там нету
- Если Вы думаете, что они Неявно Намекают, то... авторство этой идеи, боюсь, не их.
Хотелось бы пример, каким образом ActiveRecord vs Table Data Gateway имеет отношение к "функциональщине".
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-08-11 12:25 pm (UTC)no subject
Date: 2009-08-11 01:23 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-08-11 05:23 pm (UTC)no subject
Date: 2009-08-11 05:29 pm (UTC)Хуже всего, когда из такого языка приходится взаимодействовать с низким уровнем, вроде дров железа или там звуковой подсистемой - я сейчас уже полдня ловлю ошибку нарушения защиты памяти в таком коде, будь он неладен.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-08-11 06:55 pm (UTC)и очень хорошо сделанные :)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: