@proRuby

Страница 218 из 1594
Lupsick
02.10.2016
21:35:28
это будет полезно в случае 4-х описанных бекендов

1-2 не всчет

3-4 бекенда это кейс 5%

Alex
02.10.2016
21:37:03
1 2 бэкенда это по факту где то четыре условия

Google
Alex
02.10.2016
21:37:07
в деве не должно отправляться

потом, в разныэ энвироментах тоже разные бэкенды могут юзаться.

например очень логично на стейж закинуть какой то временный смс бэкенд если на проде юзается интранет

и оно все абсолютно бесшовно будет работать

к тому же зачем городить switch case если есть готовый гем?

Alexander
02.10.2016
21:39:24
ты же не опишешь все бекенды
а ты опишешь докер-образ моего приложения?

Alex
02.10.2016
21:39:27
просто конфигурируй в DSL и все.

?

Alexander
02.10.2016
21:39:51
нету докер-образа моего аппа — не буду использовать!

Lupsick
02.10.2016
21:40:38
нету докер-образа моего аппа — не буду использовать!
обычно образ подходит под какой-то тип приложений

Alex
02.10.2016
21:41:14
обычно смс бэкенд подходит под публичные сервисы

а теперь представь что поверх моей абстракции я могу active mailer like интерфейс зарядить

с смс мейлерами

Google
Lupsick
02.10.2016
21:42:59
очень много работы

ну делай я не против

Alex
02.10.2016
21:43:18
Госпаде, в чем работа то?

Lupsick
02.10.2016
21:43:19
если смотреть с позиции что человеку нужно было отправлять смс и он нашел твой гем со своим бекендом

то это полезно

Alex
02.10.2016
21:43:31
Это 90% кейсов.

Lupsick
02.10.2016
21:43:34
а если у меня есть смс гейт и мне надо его настроить быстро то хз

Alex
02.10.2016
21:43:48
почему нет то?

зато потом ты сможешь переключиться по быстрому. Тебе не надо будет думать над case when, за тебя уже типовые примеры сделаны.

Подключил и юзаешь, круто же.

И вся конфигурация однотипная, в одном месте.

Lupsick
02.10.2016
21:45:17
ну мб

Alex
02.10.2016
21:45:22
Такой же инструмент как ActiveRecord например, поверх него кучу гемов наделали.

В конце концов тебе никто этот гем не навязывает, а попав в проект где он юзается ты будешь не против (я уверен)

В свою очередь я могу сделать обертки над гемами компаний и настроить автоматическое слежение за изменениями. Breaking change? выпускаю фикс за день.

Разве что они юзают ENV'ы например

Lupsick
02.10.2016
21:46:58
мне кажется там очень много работы по поддержке

Alex
02.10.2016
21:46:59
или другой гавнокод.

Мммм нет.

Если настроить автоматическое оповещение об изменениях то проблем не должно возникнуть.

Google
Alex
02.10.2016
21:47:49
В конце концов мои косты - не твои косты. Ты просто берешь и юзаешь.

Lupsick
02.10.2016
21:48:17
ты видно не ленивый

Alex
02.10.2016
21:48:20
В худшем случае все что тебе надо будет сделать это форкнуть гем и поправить какие то вещи, если тебе реально критично.

ты видно не ленивый
Там не так много работы как тебе кажется. Написать обертку это просто. Проблемы начинаются когда гем компании заюзает антипаттерн

например будет брать токен из ENV

@pimpmyyoba у тебя гитхаб заполнен чем нибудь полезным?

Alexander
02.10.2016
21:52:14
например будет брать токен из ENV
это плохо? сам не юзаю, но видел

Alex
02.10.2016
21:52:25
Это антипаттерн

например это сложно тестировать

Alexander
02.10.2016
21:52:40
ну мб
видимо, аналогия с докером донесла мысль)

Lupsick
02.10.2016
21:52:50
Alexander
02.10.2016
21:52:54
Alex
02.10.2016
21:52:59
меняется

Alexander
02.10.2016
21:53:09
меняется
в чём сложность тестов?

Alex
02.10.2016
21:53:11
а почему этот код зависит от глобального состояния?

а если я запущу тесты в паралели?

Alexander
02.10.2016
21:53:23
что у тебя из YAML Hash, что из ENV — разница-то?

Alex
02.10.2016
21:53:40
сразу ~4 теста запустятся в паралели и все будут тестировать этот гем

Alexander
02.10.2016
21:53:45
а почему этот код зависит от глобального состояния?
а если ты меняешь в коде руби ENV — он что, в шелл уходит?

Alex
02.10.2016
21:53:47
так вот, начнутся рандомные падения (могут)

Google
Alexander
02.10.2016
21:53:52
а

Alex
02.10.2016
21:54:03
Хм, вообще д

Alexander
02.10.2016
21:54:06
параллель в самом процессе? а нах, если GIL?

Alex
02.10.2016
21:54:10
ENV наверное отдельный на свой поток

аргумент снимается

Alexander
02.10.2016
21:54:41
ENV наверное отдельный на свой поток
ну я не тестил, но было бы глупо, если не так. по опыту с другими приложениями там зачастую ещё поставить нужно

Alex
02.10.2016
21:54:55
в приложениях ENV это отличная вещь

Alexander
02.10.2016
21:54:58
собсна шелл сам тоже прога, он просто даёт этот енв всем прогам, запускаемым из него

Alex
02.10.2016
21:55:05
а вот в конкретном коде библиотеки это вредная штука

мне перед каждым вызовом придется его проставлять и потом возвращать

Admin
ERROR: S client not available

Alex
02.10.2016
21:55:24
а если у меня паралельный код как в пуме?

Lupsick
02.10.2016
21:55:35
а ты не можешь сделать общий файл с конфигурацией?

Alex
02.10.2016
21:56:13
могу

точно также я могу и глобальные $переменные выставлять

только все это антипаттерны.

Класс доллжен принимать в конструкторе все что ему нужно, в том числе опции

либо иметь возможность их задать, в рубях через configure например

Таким образом этот класс легко тестировать и легко таскать с места на место, плюс все что ему нужно явно видно где находится.

Google
Alex
02.10.2016
22:24:38
так, а откуда взять конфиг, который прокинуть классу? YAML, ENV, anything else?
если у тебя класс требует тонны конфигов то принцип единой ответственности извращенно нарушен

Alexander
02.10.2016
22:27:04
если у тебя класс требует тонны конфигов то принцип единой ответственности извращенно нарушен
Я про способ хранения знаний, которые ему нужно прокринуть. Как лучше их хранить?

Alex
02.10.2016
22:27:20
как угодно, разве это имеет значение?

если ты хранишь секреты то это одно

если другие данные то просто в коде их прописать

у себя я секреты через ENV пробрасываю в secrets.yml

дальше уже их на местах потребляю.

типа Rails.application.config.secrets[:db][:host]

таким образом в secrets.yml у меня видно какие вообще секреты есть в приложении

Alexander
02.10.2016
22:31:14
YAML + ENV? ? Зачем? Почему не что-то одно?

Alex
02.10.2016
22:33:06
Чтобы в одном месте было видно.

Либо у тебя ENV по всему коду будет размазан

и ты можешь легко что то забыть а увидишь только по эксепшену

Alexander
02.10.2016
22:35:11
Кстати, по сабжу: как я уже сказал, мне не нравится функциональность (классовые методы), в том числе в ActiveSMS. Вот, помимо вкуса, ещё один аргумент: класс — это константа на весь код, как ENV. Ты у него меняешь переменную (configure), как внутри Hash. Следовательно, на один код не настроешь по-разному (для параллельных задач) без наследования. Почему не через инициализацию?

Alex
02.10.2016
22:35:48
Это паттерн синглтон

я сделал так чтобы было легко юзать

Alexander
02.10.2016
22:36:25
Чтобы в одном месте было видно.
Зачем это? И зачем ENV вообще, если есть YAML? Почему только один? В одном месте — это можно в одной директории разбить на файлы

Alex
02.10.2016
22:36:36
Ээээ

а как ты в secrets.yml засунешь пароли без ENV то?

Alexander
02.10.2016
22:37:06
Это паттерн синглтон
Да ну? Синглтон — это же когда у объекта добавляешь метод, нет?

Alex
02.10.2016
22:37:36
Синглтон это когда класс глобальный

ты не можешь получить уникальный инстанс класса, он один на все приложение

Страница 218 из 1594