@proRuby

Страница 770 из 1594
Alex
28.09.2017
07:16:22
в реально худшем случае юзай refinements

.nil? вообще опасно трогать.

в общем атата

Google
Anton
28.09.2017
07:17:48
Нормально ли в null object паттерне переопределять метод #nil?, чтобы не рефакторить все те места, где раньше возвращался nil?
Если посмотришь гайды и гемы, то будет норм, если ты в классе (только в нем) определишь свой метод nil?

Sergey
28.09.2017
07:19:15
в реально худшем случае юзай refinements
Не, у меня свой класс. Раньше метод возвращал nil и во многих местах была проверка, потом поменяли на null object, но проверка на nil? осталась.

Alex
28.09.2017
07:19:32
если метод собственный то не так страшно

а вот nil.nil? патчить вообще зашквар.

т.е на своем объекте проверку запилить - ну наверное можно.

Sergey
28.09.2017
07:20:53
Окей, спасибо!

Alex
28.09.2017
07:22:30
рано или поздно лучше отрефакторить имхо

Nikolay
28.09.2017
07:30:00
да чет хз, nullObject как раз таки вводят что бы nil? не было в коде

т.е. def nil? в nullObject всю суть nullObject’a убьет

Sergey
28.09.2017
07:34:28
да чет хз, nullObject как раз таки вводят что бы nil? не было в коде
Оказывается не везде убрали, аджайл же, быстрее бы в продакшен

Alex
28.09.2017
07:35:35
аджайл фигайл

Google
Alex
28.09.2017
07:35:41
потом помрете под гавнокодом.

Sergey
28.09.2017
07:35:44
Кстати, посмотри на гем от авди гримма
Вот еще бы он в активрекорде его везде возвращал, было бы круто

Nikolay
28.09.2017
07:42:08
Оказывается не везде убрали, аджайл же, быстрее бы в продакшен
я не знаю что за класс, но обычно даже самый связный класс юзается с десяток раз) а это можно за 1 присест пофиксить)

если тесты есть офк

Vasiliy
28.09.2017
07:42:51
о чём трёп? чёт дохуя чиать вас

Nikolay
28.09.2017
07:42:51
а если нет тестов, то держи вазелин —> *вазелин*

Alex
28.09.2017
07:42:55
Nikolay
28.09.2017
07:45:28
о чём трёп? чёт дохуя чиать вас
должен ли nullObject прикидываться nil’ом

Alex
28.09.2017
07:45:52
а зачем nullObject вообще нужен?

Денис
28.09.2017
07:50:42
а зачем nullObject вообще нужен?
Очень полезная вещь, когда объекты удаляются

Anna
28.09.2017
07:51:14
Чтобы не писать везде кучу кода типа if some_object.present? some_object.blah else 'blah' end

Денис
28.09.2017
07:51:19
Чтобы не писать user&.company&.name

Fedor
28.09.2017
07:51:41
эм

а не проще ли один раз воткнуть return unless object

Anna
28.09.2017
07:51:57
Alex
28.09.2017
07:52:14
Чтобы не писать user&.company&.name
у тебя у нуллОбъекта нет компании. Как он имя компании получит?

Nikolay
28.09.2017
07:52:18
ну например у тебя есть класс Животные. Есть Коши, Собаки - наследники Животные. class Cat < Animal def say “Мяу” end def count_of_lives 9 end end class Dog < Animal def say “Мяу” end def count_of_lives 1 end end И есть у тебя кусок кода, который пытается типа def foo(animal) if animal.count_of_lives > 5 do puts “IA ZIVY DOLGO” else puts animal.say end end И что бы не писать везде if.present? unless.nil? ты можешь заимплементить класс NullAnimal который имеет такой же интерфейс, как и настоящие животные

Anna
28.09.2017
07:52:46
Nikolay
28.09.2017
07:52:53
и твой foo будет рабочим всегда

Alex
28.09.2017
07:52:58
ну такое. Все равно надо везде учитывать что может быть нулльОбъект

Google
Fedor
28.09.2017
07:53:46
ну ты по сути просто все вот эти ифы вытаскиваешь в отдельный класс и все

Anna
28.09.2017
07:54:07
ну такое. Все равно надо везде учитывать что может быть нулльОбъект
Наоборот использующий код не знает, что бывает null-объект, ему пофиг. А вот null-объект должен учитывать, где он используется, ну зависит от ситуации.

Alex
28.09.2017
07:54:27
вот использующий код не знает, и добавит nullObject в отчет, как существующий

Fedor
28.09.2017
07:55:09
высокая связность? :)
ну хз, помоему это просто чрезмерная абстракция

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

Nikolay
28.09.2017
07:55:47
просто тут руби еще( Вот в мире, где есть паттерн метчинг там еще красивее всё, т.к. можно матчится на этот NullObject…а в мире, где есть свёртки, можно `flatMap`’ом выкосить все NullObject’ы

Anna
28.09.2017
07:55:54
Ну получит там пустую строку (например) вместо NoMethodError. Это если некритично. Если критично, то это другое дело, мб эксепшен, мб ещё что-то.

Nikolay
28.09.2017
07:56:23
Яваподходы.
зря ты так, в Джавы много хороших архитектурных решений

Fedor
28.09.2017
07:56:26
ruby way - переопределить method missing )

Nikolay
28.09.2017
07:56:31
вместо тысячи if\else\switch

Alex
28.09.2017
07:56:37
зря ты так, в Джавы много хороших архитектурных решений
в джавы много решений которые хорошы только для джавы.

Fedor
28.09.2017
07:56:44
зря ты так, в Джавы много хороших архитектурных решений
просто там без этой архитектуры писать невозможно

Alex
28.09.2017
07:56:51
Fedor
28.09.2017
07:57:00
дорогой, и кривой достаточно )

Nikolay
28.09.2017
07:57:06
он вроде дорогой, не?
руби сам дорогой))

Fedor
28.09.2017
07:57:07
и вообще я бы это антипатеррном назвал )

Google
Fedor
28.09.2017
07:57:09
но руби вэй

Anna
28.09.2017
07:57:34
ruby way - переопределить method missing )
В Confident Ruby и это описано :D для NullObject, но там свои проблемы, я бы такое не использовала.

Nikolay
28.09.2017
07:58:04
а это плохо?
да, ветвящийся код всегда сложнее линейного

Alex
28.09.2017
07:58:17
Я проверяю залогинен ли юзер, а он всегда залогинен

Anton
28.09.2017
07:58:40
nullObject еще сложнее.
держать всю бизнеслогику в одной моделе user еще проще

Admin
ERROR: S client not available

Nikolay
28.09.2017
07:58:50
я ж не говорю что гоу везде пихать их) где-то удобно, т.к. под задачу ложится…в руби есть nullObject = nil

Anna
28.09.2017
07:58:52
У тебя должно быть прописано, что GuestUser не залогинен.

Alex
28.09.2017
07:58:52
и чем дальше тем сложнее.

Maksim
28.09.2017
07:59:02
чего люди не придумывают, лишь бы констрейнты в базе не делать =)

Alex
28.09.2017
07:59:18
Maksim
28.09.2017
07:59:43
а в чём сложность? Эйрбрейк тебе напомнит если ты упустил что-то

Nikolay
28.09.2017
07:59:46
У тебя должно быть прописано, что GuestUser не залогинен.
кстати да, вот GuestUser - NullObject очень красивый

Anton
28.09.2017
08:00:04
вообще, единственный юзкейс для "nullobject" который мне нравится - это вот всякие анонимные юзеры и прочая лабуда

Fedor
28.09.2017
08:00:05
У тебя должно быть прописано, что GuestUser не залогинен.
ну у меня просто стоит before_action callback который проверяет наличие пользователя и обычным return unless кидает ошибки

нафига мне городить null object для этого?

Google
Maksim
28.09.2017
08:00:49
но наверное если интерфейс сильно похожий для анонимуса и нет, то будет хитрее

Anton
28.09.2017
08:01:02
блин, как вы с колбэками живете то?

Nikolay
28.09.2017
08:01:06
а если нужно в интерфейсе вывести типа “Гость”, показать “0” как колво сообщений и еще какие-то спец. выводы?

Anton
28.09.2017
08:01:06
в 2k17 году

Anna
28.09.2017
08:01:28
нафига мне городить null object для этого?
Тут скорее о других ситуациях. Например, надо написать "привет, юзернейм" vs "привет, гость".

Alex
28.09.2017
08:01:45
блин, как вы с колбэками живете то?
коллбэк на authenticated? норм.

Anton
28.09.2017
08:02:04
Тут скорее о других ситуациях. Например, надо написать "привет, юзернейм" vs "привет, гость".
если еще проще, null object это больше про отображение данных, чем про логику какую-то

Anna
28.09.2017
08:02:46
Да, логики в самом nullobject немного.

Nikolay
28.09.2017
08:03:08
собственно она “стабовая” = хардкод

Fedor
28.09.2017
08:03:08
Fedor
28.09.2017
08:03:23
вот есть у тебя null user который возвращает на name слово гость

а что он делает, когда на его мыло надо почту отправить?

когда надо ему в личку сообщение написать

все равно это все будет затыкаться ифами

просто в другом месте

а еще ему надо локаль проверять, что вернуть "гость" в правильной локали

Anna
28.09.2017
08:04:16
В некоторых случаях возвращать nil, например )

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