Size: a a a

2021 April 13

W

Warstone in Modern::Perl
Потому что половина паттернов является антипаттернами.
источник

И

Игорь in Modern::Perl
вот это поворот😳
источник

a

allter in Modern::Perl
Кстати, в тамошних примерах как раз отражено то, что я выше пытался объяснить. В python используется next с исключением на финише, в руби - интерфейс each с принятием лямбды и т.д.
источник

И

Игорь in Modern::Perl
👍 а было бы еще на perl с учетом специфики разработки на нем, было бы вообще супер. А так получается, что с каждым годом все меньше и меньше гуглится...
источник

a

allter in Modern::Perl
Ну, не столько антипаттернами, сколько разной уместностью применения. И у некоторых паттернов в современных языках эта уместность очень "сужена".
источник

W

Warstone in Modern::Perl
Ну например... Паттерн Фабрика... Зачем он нужен? Потому что какой-то дятел решил что конструктор обязательно должен создать объект. Фабрика нужна только для того чтобы можно было не создать объект. Все остальное засовывается в конструктор. В реалиях Перла это не надо. Просто создаешь объект или не создаешь через new.

Паттерн синглтон. Зачастую является анти паттерном. Пример? Ну вот у нас очень любят использовать state $app = get_the_app();. Или state $memd = $app->memd. С одной стороны - удобно. А теперь в тестах мне понадобилось совместить 2 аппликейшена, которые реально друг с другом разговаривают, но написаны на одном фреимворке с этими state $app.

Про DI говорить не буду, так как это ебланизм.
источник

W

Warstone in Modern::Perl
По факту примерно половина паттернов - это ответ на вопрос "Как обойти ограничение Х". Причем вариант "поправить язык так, чтобы ограничения небыло" никто не выбирает.
источник

a

allter in Modern::Perl
Ну, тут перебор. Фабрика в Perl активно используется, причём очень часто внутри фабрики делается довольно магическая и perl-специфичная вещь, например:

eval "require XXX";


А про Синглтон согласен - тоже попадал как раз в такую ситуацию (причём ладно тесты - приходилось и в продуктивном коде совмещать то, что предшественники решили сделать синглтонами - например, предполагая что одна реализация всегда будет в контроллерах, а другая - в асинхронных обработчиках). Вместо синглтонов для DI в Perl КМК лучше использовать "контекст" - передавать нужные зависимости в объекты или в методы.
источник

W

Warstone in Modern::Perl
> Ну, тут перебор. Фабрика в Perl активно используется, причём очень часто внутри фабрики делается довольно магическая и perl-специфичная вещь,

Что вам мешает это сделать в new? Я скажу крамолу, но вас никто не заставляет даже возвращать объект того-же типа. Вам нужен пример? DBI->connect сойдет?
источник

W

Warstone in Modern::Perl
Тут можно перекрутить в другую сторону: new является фабрикой. И тогда мы начнем срач на тему "А что есть фабрика". Который придет к тому что фабрика - это что-то где есть слово factory и оно создает объект (или не создает)
источник

a

allter in Modern::Perl
Эм. Что бы "это сделать в new" нужно сначала загрузить пакет, где этот new доступен.
источник

W

Warstone in Modern::Perl
Так чтобы фабрику использовать ее тоже надо загрузить
источник

a

allter in Modern::Perl
Ну, она-то обычно подгружена. А вот конкретные классы, объекты которых она делает - не обязательно...
источник

W

Warstone in Modern::Perl
Вы удивитесь, но, допустим, при создании словарей (модели данных) у нас автоматом подгружались се модули из папки Х, для чего не было файла - то автогенерировалось, потом создавалась модель (в рантайме генерировались аксессоры и т.д.), загружались данные (словарь это такая модель, которая не меняется со временем у нас) и все это происходило внутри new. Чем не фабрика?
источник

W

Warstone in Modern::Perl
Причем словари были попилены по классам (вертекально, правда, а не горизонтально. Что косяк, но - легаси) и Model::Dictionary->new отдавал Model::Dictionary::Full или не Full, а Simple, если в параметрах new были соотв. ключи.
источник

АН

Андрей Нагорный... in Modern::Perl
привет, когда нет соединения, не выполняется блок catch. а просто крашится программа
sub connect {
   try {
       my ($host, $port, $db, $collection) = @_;
       my $client = MongoDB->connect("mongodb://$host:$port");
       my $cursor = $client->ns("$db.$collection");
       
       $cursor->find_one({});
       return $cursor

   } catch {
       print "Error: $!";
   }
}
StdErr
: нет соединения с бз
источник

SZ

Sergey Zhmylove in Modern::Perl
Спасибо за информацию, и что?))
источник

АН

Андрей Нагорный... in Modern::Perl
как мне ошибку отловить, и обработать ?
источник

SZ

Sergey Zhmylove in Modern::Perl
Из какой строки падает?
источник

W

Warstone in Modern::Perl
А что... У нас return научился из try пробрасываться?..
источник