@scala_ru

Страница 1257 из 1499
Dim
04.02.2018
11:17:12
Но там как раз через аннотации ;)

Sergey
04.02.2018
11:17:53
Есть конфиг, там всё, где надо инжектим значение.
Другими словами твои объекты БУДУТ ЗНАТЬ о каком то там конфиге, и об спринг анотациях. А им это вовсе не нужно.

Dim
04.02.2018
11:19:06
Другими словами твои объекты БУДУТ ЗНАТЬ о каком то там конфиге, и об спринг анотациях. А им это вовсе не нужно.
Не, о конфиге они особо знать не будут. Поле аннотируется аннотацией и все, дальше магия препроцессора аннотаций...

О конфиге знает библиотека которая собственно этим и занимается, просто не выворачивая кишки наружу.

Google
Dim
04.02.2018
11:19:53
(и они вывернутся в случае сбоя)

Dim
04.02.2018
11:21:08
Если конфигурирование через аннотации кто-то сделал....То наверное это кому-нибудь нужно?....))

Dim
04.02.2018
11:21:45
Почему б не передавать эти значения в виде параметров ?
Потому-что экземпляр класса создается через DI

Alexey
04.02.2018
11:22:47
Если конфигурирование через аннотации кто-то сделал....То наверное это кому-нибудь нужно?....))
это конечно так. но ведь и ejb ктото сделал. это не значит что их нужно использовать.

Dim
04.02.2018
11:23:25
И код этот тоже кто-то поддерживает.

А потом будут поддерживать ваш, с cats и другими волшебными вещами))) и так далее...в каждую эпоху все будут "удивляться"

Alexey
04.02.2018
11:24:36
Но используют же до сих пор)))
я в этом направлении дальше не пойду. я думаю идея ясна, а поболтать как нить в другой раз ))

Sergey
04.02.2018
11:24:39
И код этот тоже кто-то поддерживает.
Кстати как у тебя дела? Нашел работу?

Dim
04.02.2018
11:25:15
Хотя с возрастом это все сложнее и сложнее.

Google
Dim
04.02.2018
11:25:49
Ко мне недавно приходил 45 летний...сказал - не берут никуда. Из-за возраста.

Программист.

Sergey
04.02.2018
11:27:03
Даже больше чем нашел.
Что за проект? Это там такая жопа с конфигом?

Daniel
04.02.2018
11:34:57
надо различать неявные вещи и те которые просто не понимаешь с первым ты уже ничего не сделаешь, со вторым все в твоих руках

Dim
04.02.2018
11:36:04
в том и суть что там волшебства нет
Смотря для кого)) для человека из EJB Java EE - это вообще шайтаномо )))

Daniel
04.02.2018
11:38:36
видно я не донес мысль о различиях понять как устроена аннотация и что за ней скрывается - это не поможет убрать всю ту неявность, которую они тащат аналогично неаккуратному использованию имплистов не понимать что делают кошаки - это вопрос конкретного человека, но неявного (кроме syntax._) там нет, наоборот тестируются выполнения законов

Gennady
04.02.2018
11:45:12
По поводу строгости и проверяемости полностью согласен.
дык все аргументы сводятся к тому, что аноташка это быстро, но под капотом хрупкая магия, а прямой код - он и в африке прямой код

Dim
04.02.2018
11:51:30
Почему в Spring это сделано не через явную загрузку конфига?

Alexander
04.02.2018
11:52:38
дык все аргументы сводятся к тому, что аноташка это быстро, но под капотом хрупкая магия, а прямой код - он и в африке прямой код
Помимо этого "аноташка" - метаинформация прибитая гвоздями к определённому участку кода.

Почему в Spring это сделано не через явную загрузку конфига?
Потому что Спринг не парится над тайпсейфностью?

Gennady
04.02.2018
11:55:14
Почему в Spring это сделано не через явную загрузку конфига?
потому что спринг стал модным по сравнению с EJB, сделали DI на аноташках и понеслось сам подход никогда не был хорош

Oleksandr
04.02.2018
11:55:17
Помимо этого "аноташка" - метаинформация прибитая гвоздями к определённому участку кода.
и что конкретно она делает, фиг поймешь, просто кляцнув go to definition

Alexander
04.02.2018
11:55:23
Ну, каждому своё.

Dim
04.02.2018
11:55:24
Такой вроде бы мегафреймворк...а аннотациями...

Gennady
04.02.2018
11:55:44
плюс у явы большие проблемы с типизацией

Google
Gennady
04.02.2018
11:56:20
поэтому много что прощается - никто не будет писать в 5 раз больше кода ради того, что потом нельзя использовать

Александр
04.02.2018
12:09:56
Хотя с возрастом это все сложнее и сложнее.
это сколько лет должно быть чтобы не брали ?

Dim
04.02.2018
12:10:42
это сколько лет должно быть чтобы не брали ?
Ну не знаю, вот чувака которому 45 - его не берут, прям так и сказали - не вписываешься ты в наш молодой коллектив. Хотя дядька знает-умеет.

Александр
04.02.2018
12:11:44
пытаюсь не думать о себе в 45 лет, мало, кстати, видел адекватных программистов такого возраста, видимо в манагеры ушли но видел пачку людей дописывающих на делфи etc

Юрий
04.02.2018
12:12:15
Почему в Spring это сделано не через явную загрузку конфига?
Потому что так исторически сложилось. Ну и в джаве тебе придётся писать 100500 строк кода для представленгия своего конфига в виде кода, и это, естественно, так себе развлечение. Многие подходы в джаве обоснованны только тем, что джава многословный и невыразительный язык. В скале ты просто делаешь кейс класс, который мапится 1к1 на конфиг.

Dim
04.02.2018
12:13:00
А вот так нормально или тоже плохо? trait MongoConfig { val config = ConfigFactory.load() val database = config.getString(s"mongodb.$mode.database") val servers = config.getStringList(s"mongodb.$mode.servers").asScala val userName = config.getString(s"mongodb.$mode.user") val password = config.getString(s"mongodb.$mode.password") val credentials = List(Authenticate(database, userName, password)) } //и далее подмешиваем где нам это нужно.

Alexey
04.02.2018
12:14:29
да, так норм. но вот чтобы убрать боилерплейт чтения из конфига используют pureconfig

вместо pureconfig может быть что угодно что тебе больше нравится

они все плохие, но pureconfig самый, хм, неплохой

Юрий
04.02.2018
12:16:41
ну и да, pureconfig

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

Юрий
04.02.2018
12:22:18
Ок, буду копать pureconfig.
тебе потом с этим будет очень удобно работать. Можно будет при старте приложения в консоль плюнуть конфиг - это очень помогает. И ошибки очень ясные будут. И тестировать всё будет просто - в тесте руками создал конфиг и в путь

Alexey
04.02.2018
12:24:36
а с большими конфигами удобно ? когда параметров по 40-50 ?
ты же можешь вкладывать case classы друг в друга :)

Google
Kirill
04.02.2018
12:25:02
ух, как же приятно описывать в тестах моки конфигурационных кейс классов, когда там куча полей и вложенности

Kirill
04.02.2018
12:26:43
пишешь и проговариваешь - ух,мля
Ага, в такие моменты, когда там эта программно составленная конфигурация начинает занимать пол-экрана, у меня начинают в опенспейсе обои отклеиваться

Юрий
04.02.2018
12:27:27
ух, как же приятно описывать в тестах моки конфигурационных кейс классов, когда там куча полей и вложенности
обычно тол левел конфиг содержит много маленьких конгфигов, где каждый конфиг уже задает параметры для какой-то конкретной части. Как было выше в примере - конфиг для монги скармливается сервиса монги. В итоге в тестах ты только этот конфиг и описываешь

так что нет, никаких проблем с большими конфигами не возникает

и моки вообще не нужны - просто создаешь в коде теста инстанс конфига -и всё

Alexey
04.02.2018
12:29:41
Ага, в такие моменты, когда там эта программно составленная конфигурация начинает занимать пол-экрана, у меня начинают в опенспейсе обои отклеиваться
никто не мешает тебе считать ее из файла если нужно. но по моему опыту количество строк кода одинаковое - одна строчка на одно значение.

Kirill
04.02.2018
12:31:01
А что если конфиг монги состоит из множества полей? Ну, прямо вот много. Бизнес-логика у всех разная. Плюс, если вайрингом занимается какой-то macwire, то в сервис ты передаешь весь конфиг, и мокаешь ту часть, которая в сервисе используется, ну, например, when(appConfig.someConfig).thenReturn и тут вот этот огромный конфиг.

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

Nick
04.02.2018
12:33:01
Читалки конфига в тесте и не будет

Ты сам можешь руками создать кеис класс

Alexey
04.02.2018
12:33:30
Мешает, я не хочу, чтобы от корректности читалки конфига из файла зависели тесты вообще других сервисов
ну тебе же все равно нужно где-то эти конфиги как-то написать если ты хочешь чтобы в тестах от них была зависимость. я не могу представить как можно задать n полей проще чем задать n полей. все равно где и как из задавать - в конфиге или через создание case class

Kirill
04.02.2018
12:33:34
Читалки конфига в тесте и не будет
Но мне же предложили прочитать из файла в тесте, ты опять не читаешь сообщения в чате

Nick
04.02.2018
12:33:47
Нет, не читаю

Юрий
04.02.2018
12:33:52
Nick
04.02.2018
12:33:56
Потому что у вас тут опять дичь )

Kirill
04.02.2018
12:35:05
Я не сталкивался с такими проблемами. В реальности там обычно параметров не больше 10-15 на один сервис. Это вполне норм. Насчёт маквайр ничего не скажу, но выглядит как проблема маквайра
Так ты утверждаешь, что моки не нужны, проблем не возникает, но ты не сталкивался с таким? Не сталкивался, но утверждаешь, всё верно?

Nick
04.02.2018
12:35:40
Мне кажется Кирилл прошёл школу начинающего гопника)

Google
Юрий
04.02.2018
12:36:19
Так ты утверждаешь, что моки не нужны, проблем не возникает, но ты не сталкивался с таким? Не сталкивался, но утверждаешь, всё верно?
Я просто передаю все через параметры конструкторы, соответственно мне не нужны моки для конфига

Kirill
04.02.2018
12:36:42
Нет, я хочу понять, почему люди безапеляционно утверждают, что они правы и их подход верный, а мой неверный, при этом не сталкиваясь с подобными проблемами.

Юрий
04.02.2018
12:41:00
Нет, я хочу понять, почему люди безапеляционно утверждают, что они правы и их подход верный, а мой неверный, при этом не сталкиваясь с подобными проблемами.
Сколько бы ни было параметров, тебе так и так придется их задать. Что может быть проще создания кейс класса с нужными полями?

Kirill
04.02.2018
12:42:42
Alexey
04.02.2018
12:42:44
Сколько бы ни было параметров, тебе так и так придется их задать. Что может быть проще создания кейс класса с нужными полями?
я теоретически могу представить что может быть проще загрузить стейт конфига из дефолтного конфига и поменять то что нужно для теста

Не напомнишь, где я сказал, что создание кейс класса конфига в тесте это "сложно"?
а ты что собственно хочешь выяснить? можешь вопрос повторить?

Kirill
04.02.2018
12:44:47
а ты что собственно хочешь выяснить? можешь вопрос повторить?
Я не задавал вопросов, мне просто пояснили, что я неправ, что использую macwire, он проблемный, и я неправильно пишу тесты, мокая конфигурацию и делая большие конфиги.

Alexey
04.02.2018
12:45:25
Дефолтные параметры?
ну не всегда хочется дефолты задавать в кейс классе. мне больше нравится модель typesafe config.

Kirill
04.02.2018
12:45:41
Да никто тебе не запрещает)
Спасибо, Ник, без тебя я бы не разобрался ))

Nick
04.02.2018
12:48:25
Ехать это в ваш питерсбурх, ну его
Тут будет вся топ банда

Kirill
04.02.2018
12:50:13
Тут будет вся топ банда
Я в мск-то не мог до митапа дойти, так теперь тут вообще не проводится :D

Юрий
04.02.2018
12:50:55
Я просто предлагал решение, которое хорошо работает. Если ты делаешь иначе - твое право

Sergey
04.02.2018
13:50:43
А что если конфиг монги состоит из множества полей? Ну, прямо вот много. Бизнес-логика у всех разная. Плюс, если вайрингом занимается какой-то macwire, то в сервис ты передаешь весь конфиг, и мокаешь ту часть, которая в сервисе используется, ну, например, when(appConfig.someConfig).thenReturn и тут вот этот огромный конфиг.
Если настроек мало, то передаем их в виде параметров (конструктора) Если много - то они разбиваются на тематические интерфейсы IConnectDBCfg ILogCfg ISvcCfg И передаем в виде параметра Если у вас сингл респонсибилити объекты(привет Solid) то обычно достаточно передать всего один интерфейс

Страница 1257 из 1499