@scala_ru

Страница 825 из 1499
Denis
17.07.2017
07:46:24
номер

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

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

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
Вообще выглядит странно, потому что в protobuf3 нету optional)
да там еще oneOf не очень поддерживается

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 кроме генерации кейс классиков еще и генерятся клиент с сервером?

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
И этот клиент который там есть - насколько он навороченный? там есть какие-то гарантии доставки сообщений или что-то такое?

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

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

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

KrivdaTheTriewe
17.07.2017
08:32:58
Ну я т знаю что он не null
короч ты делаешь то , за что Нада отрывать руки!

ты пытаешься писать код, который не проверит компилятор

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

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
как проводить миграцию версий при использовании подобной штуки?
я либой этой не пользовался, но думаю что так: никогда не менять поля местами, не удалять поле, только добавлять, а если у тебя event sourcing, то просто создаешь новый кейс класса эвента и сохраняешь а старый никогда не меняешь

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

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
но старые ивенты не содержат нужных данных
имхо, нужно решить, являются ли старые сущности валидными инстансами аггрегата, и если да, то от обработки None-кейса некуда деваться

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:

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