
Mikhail
03.09.2018
13:11:22

Alexey
03.09.2018
13:11:43

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

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

Andrey
03.09.2018
13:45:29

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);
вопрос энивей иначе стоит - как добавить методы в класс в компиль тайме?
с меньшей кровью

Bogdan
03.09.2018
14:14:14

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
этот путь известен
может есть другой?

Andrew
03.09.2018
14:33:29

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 не определено?

?Kolay
03.09.2018
17:38:02

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

?Kolay
03.09.2018
17:39:01

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

?Kolay
03.09.2018
17:39:27

Alexander
03.09.2018
17:54:23
А чем finally плох?
и никакие continue не нужны

?Kolay
03.09.2018
17:56:03

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

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

Mikhail
03.09.2018
18:15:30

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

Igor
03.09.2018
21:33:16