
Denis
17.07.2017
07:46:24
номер

Oleg
17.07.2017
07:46:49
ну вот тэг

Roman
17.07.2017
07:48:57
просто если из середины кейс класса удалить поле, то нумерация съедет. и при десериализации все развалится в труху

Denis
17.07.2017
07:49:12

Google

Oleg
17.07.2017
07:49:25
ну так и все про это

Daniel
17.07.2017
07:49:41
не очень понятно нафига вообще протобаф, если схема не сдалась

Oleg
17.07.2017
07:50:29
How can we solve this? Well, we need to give a number to every member of the enum. That’s why PBDirect has a Pos trait. The Pos trait can be used to indicate the position of an object into the enum.
sealed trait PhoneType extends Pos
object PhoneType {
case object Mobile extends PhoneType with Pos._0
case object Home extends PhoneType with Pos._1
case object Work extends PhoneType with Pos._2
}

Daniel
17.07.2017
07:50:30
велосипед какой-то

Denis
17.07.2017
07:51:15
ну да ) сразу начинается течь
со всех щелей )

Oleg
17.07.2017
07:51:59
но это только для Enum ов

Alexey
17.07.2017
07:52:38
StaticAnnotation поди зашли бы

Oleg
17.07.2017
07:53:38
В общем, https://github.com/sksamuel/avro4s

Denis
17.07.2017
07:54:39
А кто нибудь реально юзает Avro? У меня ощущение что оно пушится Confluent, но особо вне их стека не используется. Или не там смотрю )

Daniel
17.07.2017
07:55:19
у меня юзается, но в кейсе где разницы никакой с прочими

Grigory
17.07.2017
07:55:56
и у меня используется ¯\_(ツ)_/¯

Daniel
17.07.2017
07:56:15
в хадуповском стеке может быть профит, потому что всякие HBase и Hive умеют понимать эти схемы

Google

Nick
17.07.2017
07:56:39
Иметь два ADT ?
Не надо, обычно протобаф юзается внутри, и там версионность нах не сдалась. Да и добавить поле не проблема

Grigory
17.07.2017
07:56:47
спарк скуль можно тоже научить понимать схемы
https://github.com/databricks/spark-avro

Oleg
17.07.2017
07:57:10

Nick
17.07.2017
07:58:13
Вообще выглядит странно, потому что в protobuf3 нету optional)

Daniel
17.07.2017
08:01:43
конечно нету, потому что все и так опшнл

Nick
17.07.2017
08:02:24
Угу)

Daniel
17.07.2017
08:02:56
а-а, ты про схему из примера

Nick
17.07.2017
08:03:30
Вообще не вижу смысла в либе без схемы, ведь с другого языка эту Либу не поюзать. Хотя может для тестирования удобно

Nikita
17.07.2017
08:04:07

Nick
17.07.2017
08:05:38
Тем более)
Кстати, а никого не бесит что scalapb генерирует optional?)

Grigory
17.07.2017
08:22:19
меня вообще скалапб бесит)

Nick
17.07.2017
08:22:56
Гыгы

Grigory
17.07.2017
08:23:48
да
да и было не оч страшно, так что норм

Google

Nick
17.07.2017
08:26:05
А как ты решаешь проблему генерации required полей?)

Kirill
17.07.2017
08:26:40
А в scalapb кроме генерации кейс классиков еще и генерятся клиент с сервером?

Nick
17.07.2017
08:26:57

KrivdaTheTriewe
17.07.2017
08:27:09

Kirill
17.07.2017
08:27:51
Стабы? Ага
почему стабы? их нельзя использовать для отправки сообщений? я не шарю в этом

Nick
17.07.2017
08:27:57
requried deprecated
Не, его просто нет в protobuf3. Но вот понимаешь, я точно знаю какие поля мне нужны и постоянно оборачивать их в some бесит
Хз почему, первый раз тоже удивился

Kirill
17.07.2017
08:29:20
И этот клиент который там есть - насколько он навороченный? там есть какие-то гарантии доставки сообщений или что-то такое?

KrivdaTheTriewe
17.07.2017
08:29:30

Nick
17.07.2017
08:29:49
Так то проще написать Some(v)

Aleksei
17.07.2017
08:30:36
а если v null?

Nick
17.07.2017
08:30:41

Kirill
17.07.2017
08:32:42
Интересно, а какие есть тулы для организации rpc чтобы с гарантиями и вот это все

KrivdaTheTriewe
17.07.2017
08:32:58
ты пытаешься писать код, который не проверит компилятор

Nick
17.07.2017
08:33:27

Google

KrivdaTheTriewe
17.07.2017
08:33:45
и который может в рантайме упасть если кто-то в mq запишет плохой протобаф

Nick
17.07.2017
08:34:17
У меня есть Json, который определяется строго по правилам и как бы он по валидации упадёт, если поле null
Тут компилятор ну никак не поможет)

KrivdaTheTriewe
17.07.2017
08:34:32
В смысле ?
в смысле схема эволюционирует и ты можешь позабыть , что у тебя точно будет , а чего нет

Nick
17.07.2017
08:35:01
Ну ага, два раза )

KrivdaTheTriewe
17.07.2017
08:35:44
ты слишком долго сидел в Раст чатике

Nick
17.07.2017
08:36:18
Хорошо хорошо, только что делать к примеру с вложенным объектом, который всегда должен быть

Admin
ERROR: S client not available

KrivdaTheTriewe
17.07.2017
08:37:35

Nick
17.07.2017
08:37:54
Ты понимаешь , что это тупо?)

KrivdaTheTriewe
17.07.2017
08:38:28
нет не тупо

Nick
17.07.2017
08:38:47
Обоснуй

KrivdaTheTriewe
17.07.2017
08:39:08
это сейчас может всегда необходим , а потом какой нибудь другой будет объект , с другими полями , замещающий первый будет
или ещё ерунда какая

Nikita
17.07.2017
08:39:21
вроде похожий спор был у ребят в гугле когда они решили выкидывать required
типа а пусть все всегда будет опшинал, так проще версионировать
но меня это раздражает)
поэтому у меня слой протобафа отдельно живет и потом мапится в доменные кейс классы, где уже нет опшинала

Nick
17.07.2017
08:41:41
Вот вот

Google

Nikita
17.07.2017
08:41:58
но писать патматы экстракты приходится и это бесит

Nick
17.07.2017
08:41:58
Я не против опшинала везде, но оставьте вы required
Вообще конечно можно на уровне генератора это решить

Nikita
17.07.2017
08:47:22

Nikita
17.07.2017
08:56:43
кстати, говоря об event sourcing-е, со временем аггрегат начинает обрастать кучей optional-полей которые на самом деле пристутсвуют во всех новых ивентах, но оставлены опциональными для обратной совместимости. Я думал над решением, и ничего лучше как сделать две версии DTO пока не придумал. новые ивенты мапятся в новую версию, старые в старую. Может есть получше способ избавится от option?

Nikita
17.07.2017
09:00:44
ну либа не претендует на универсальность вроде, поэтому имеет свои ограничения

Vladimir
17.07.2017
09:02:39

Nikita
17.07.2017
09:02:59
о круто, ща посмотрим)

Nikita
17.07.2017
09:09:59
но старые ивенты не содержат нужных данных

Nikita
17.07.2017
09:10:17
ну я бы так же сделал) два разных дто + общий трейт

Nikita
17.07.2017
09:10:19
поэтому везде опшны

Nikita
17.07.2017
09:13:13
ой погоди еще раз прочитал твое сообщение, я бы не мапил разные эвенты в разные аггрегаты

Vladimir
17.07.2017
09:16:21

Nikita
17.07.2017
09:20:31
а что если начиная с какой-то версии приложения ты никогда больше не создаешь все эти старые эвенты, по идее ты можешь сохранить снапшот аггрегата и дропнуть старые эвенты, но мне не нравится вариант с удалением реальной истории
реально дарк сайд)

Dmitry
17.07.2017
09:49:14
http://p.migdal.pl/2017/01/06/king-man-woman-queen-why.html
че делается-то.. че делается!!
tldr: