@kotlin_lang

Страница 846 из 982
Mikhail
03.09.2018
13:11:22
натолкните на мысль как элегантно сделать апдейт дата класса другим экземпляром?
а можно переформулировать задачу? я не очень понял что ты хочешь

Nikita
03.09.2018
13:12:29
ну по другому сформулю надо что то вроде ломбока, тоже аксессоры только для CQRS

Alexey
03.09.2018
13:13:46
Ну ломбок - это плагин к компилятору ¯\_(ツ)_/¯

Google
Alexey
03.09.2018
13:15:56
Nikita
03.09.2018
13:18:01
очень много бойлерплейта в виде команди хэндлеров

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

но без создания временных сущностей

Andrey
03.09.2018
13:29:11
А что вообще подразумевается под аксесорами для CQRS?
+ тоже не совсем понял, как соотносятся аксесоры и принципом программирования.

Nikita
03.09.2018
13:33:50
+ тоже не совсем понял, как соотносятся аксесоры и принципом программирования.
ну если обращаться к тому что такое гетеры/сеторы топ подразумевается наличие у каждой сущностей набор команд для изменния сиквенса и квери для получения его состояния из сиквенса - CQS (Command query separation)

в случае CQRS эти команды и запросы вынесены на внешние шины, за пределы сушности, но все еще остаются аксессорами

Andrey
03.09.2018
13:45:29
в случае CQRS эти команды и запросы вынесены на внешние шины, за пределы сушности, но все еще остаются аксессорами
Всё равно не ощутил вашу боль (не понял, в чём проблема). Что поделать, туповат и с эмпатией проблемы. Можно какой-нить небольшой пример?

Nikita
03.09.2018
13:46:09
easy

минуту

лан не суть

Alexey
03.09.2018
14:01:00
Можно подумать вы для каждой сущности на каждое поле пишете query и command

Nikita
03.09.2018
14:01:25
да

Google
Nikita
03.09.2018
14:01:31
так требует CQRS

Alexey
03.09.2018
14:01:32
омг

Nikita
03.09.2018
14:01:37
и Axon

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

Alexey
03.09.2018
14:02:12
так требует CQRS
CQRS ничего не требует кроме разделения сообщений на выборку и обновление

Nikita
03.09.2018
14:02:12
чтобы все это работало для ES

она требует семантического разбиения команд

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

Alexey
03.09.2018
14:03:43
Это конечно, ИМХО, но вы делаете какую то жесть с CQRS

Nikita
03.09.2018
14:03:49
одно действие пользователя - одна команда

Alexey
03.09.2018
14:04:26
Действие может быть просто UpdateEmail и в нём должна содержаться достатчная инфа для обновления сущности

У вас какой то оверинжиниринг

Nikita
03.09.2018
14:05:46
но нет

если делать просто updateEmail- все аргументы за CQRS+ES сходят на нет

соль то как раз в четком аудите

прям ChangeFieldTitle(ObjectId aggrId, String title);

вопрос энивей иначе стоит - как добавить методы в класс в компиль тайме?

с меньшей кровью

Google
Nikita
03.09.2018
14:16:10
Прокси мб
не совсем понял о чем речь? как ту его прикрутить?

Bogdan
03.09.2018
14:19:25
не совсем понял о чем речь? как ту его прикрутить?
Ой мне увиделось в рантайме, ну в компайл наверно ток генерить

Mikhail
03.09.2018
14:24:28
Вот пытаюсь вникнуть что такое CQRS - очень похоже на концепцию под названием unidirectional data flow

Nikita
03.09.2018
14:27:32
плагин и кастомный аннотейшен процессор на подобии ломбока похоже на колесо из костылей

хотелось бы поиметь адекватную надстройку типа ASM

Alexey
03.09.2018
14:30:34
Еще и плагин к идеи придётся писать

Nikita
03.09.2018
14:33:01
этот путь известен

может есть другой?

Nikita
03.09.2018
14:33:58
лан кароче по людски по ходу никак не замутить)

Quantum Harmonizer
03.09.2018
16:41:07
Начинаю понимать, что низкоуровневую дичь, которую так удобно писать на котлине, сложно красиво написать на джаве. Например, без reified-дженериков произвольный метод может выделить массив только рефлекшеном (чего я не хочу), выходят костыли: concat(array1, array2, new Smth[array1.length + array2.length])

Igor
03.09.2018
16:54:02
Есть, у кого идиоматичные подходы, когда нужно lazy с пераметром?

Alexander
03.09.2018
16:54:58
Сделать этот параметр - параметром класса

В противном случае это уже не lazy

Igor
03.09.2018
17:02:33
Нельзя, это класс из фреймворка и надо что-то типо мемоизации тупо, для перформанса.

Из тупова, пока пришло в голову private val fooHolder = HashMap<Unit, Foo>() fun getCachedOrCreate(bar: Bar): Foo = fooHolder.getOrPut(Unit) { Foo(bar) }

Quantum Harmonizer
03.09.2018
17:08:45
типа https://github.com/Miha-x64/reactive-properties/blob/master/sql/src/main/kotlin/net/aquadc/properties/sql/jdbc.kt#L55

Igor
03.09.2018
17:19:28
Типа того, только у меня результат всегда один для любых парметров. Еще вот такое накидал, но тоже чет не торт: class ParametrizedLazy<T, R>(private val factory: (T) -> R) { @Volatile private var value: R? = null operator fun get(x: T): R = value ?: factory(x).also { value = it } }

Google
Admin
ERROR: S client not available

?Kolay
03.09.2018
17:26:42
Как я могу реализовать такой цикл? while (true) { try { val value = funCall() } catch (ex: Throwable) { continue } println(value) }

пишет что нет переменной value

Alexander
03.09.2018
17:31:50
она объявлена в try и снаружи не видна

?Kolay
03.09.2018
17:33:35
как я могу реализовать трай кэтч с continue?

Alexander
03.09.2018
17:35:25
Я не понял какой тут смысл в println. Можно его пихнуть в finally

Quantum Harmonizer
03.09.2018
17:36:14
Alexander
03.09.2018
17:37:29
Не будет ругаться на то, что в catch значение value не определено?

Quantum Harmonizer
03.09.2018
17:38:20
Не будет ругаться на то, что в catch значение value не определено?
пока не сунул код в компилятор, кажется, что нет

Спасибо
но вообще, эквивалентно while (true) { try { println(funCall()) } catch (ignored: Throwable) {} }

Alexander
03.09.2018
17:39:13
Понятно, что не должен, поскольку тогда unreachable statement, но вопрос в том, на сколько компилятор умный

В любом случае, это плохая практика

?Kolay
03.09.2018
17:39:27
но вообще, эквивалентно while (true) { try { println(funCall()) } catch (ignored: Throwable) {} }
мне нужно более сложный код, с принт был пример

Alexander
03.09.2018
17:54:23
А чем finally плох?

и никакие continue не нужны

?Kolay
03.09.2018
17:56:03
А чем finally плох?
в нём переменная value ещё не заиничена

Alexander
03.09.2018
17:59:25
По-моему должно работать. Ругается?

а

Google
Alexander
03.09.2018
17:59:33
ну конечно ругается

Он же не знает, что мы успели ее присвоить

Mikhail
03.09.2018
18:02:26
Andrey
03.09.2018
18:04:50
Как я могу реализовать такой цикл? while (true) { try { val value = funCall() } catch (ex: Throwable) { continue } println(value) }
Самый первый вопрос: "а вам такое зачем"? Уже сколько лет занимаюсь программированием, всегда в коде от подобных конструкций избавляются, ибо очень это нехорошо.

?Kolay
03.09.2018
18:06:06
мне нужно обработать ошибку при вызове функции, потом обработать её результат. там тоже будет ещё 1 трай кэтч

Di7aK
03.09.2018
21:28:13
принять лямбду в метод и отправить ее в глобал это нормально?

Igor
03.09.2018
21:33:16

Страница 846 из 982