|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
столкнуля с вроде бы банальной задачей (для джавы конечно же банальной). есть мешок кейсклассов. надо их все расширить одним полем показывающем их версию которая берется из одного места. следом объект кейскласса улетает в яхон сериализатор и отдается клиенту. я как джавист посмотрел как делается наследование - сделал через трейт там добавил поле. создаю инстанс кейскласса - обращаюсь к полю вер - возвращает. делаю тустринг - НЕТУ. кидаю инстанс класса в сериализатор - он пережевывает всё кроме этого поля. что за фигня. как такая задача решается в скале? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 12:34 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 12:53 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
озверел? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 13:00 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
andreykaT, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
User(a,24,1) Employer(a,24,1) ЧЯДНТ? Код приведи ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 13:59 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
Я понял, типо такого? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ну так вся магия кейс класса завязана на аргументах конструктора, toString equals ashCode берут в расчет только их. 1) Либо передавать версию в конструктор, 2) Либо сделать typeclass Versioned, написать generic shapeless сериализатор.десериализатор для case class с логикой для version? тогда она получится в одном месте. 3) Либо юзать обчные классы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 14:16 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
забыл никandreykaT, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
User(a,24,1) Employer(a,24,1) ЧЯДНТ? Код приведи тебе надо явно передавать в конструкторе версию. во всех конструкторах. помимо этого ты повторяешь это поле в каждом классе (нажуя тогда этот трайт в кейсклассе сдался? кейскласс - это поля. опция "о оно передает дефы" кейсклассу как собаке пятое колесо). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 16:13 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
забыл никЯ понял, типо такого? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ну так вся магия кейс класса завязана на аргументах конструктора, toString equals ashCode берут в расчет только их. 1) Либо передавать версию в конструктор, 2) Либо сделать typeclass Versioned, написать generic shapeless сериализатор.десериализатор для case class с логикой для version? тогда она получится в одном месте. 3) Либо юзать обчные классы вся магия кайскласса в том что это какой-то функциональный кастрат непонятно для чего прикрученный, по полям (количество полей=таплу) ограничение, по наследованию ограничение.. по чем там еще ограничение видимо, предстоит узнать в будущем. класс-инвалид. джава с ломбоком своим не так то уж и плоха оказывается. по 2. да вот копаю. пока что-то не очень выкопать получается, к сожалению. :( самый тупой вариант - просто сделать обёртку сериализатору и самому внутри обёртки привинчивать это поле к любому объекту что в него попадает). тупой вариант номер два -- это вебсервис и еще можно прикручивать это поле в интерцепторе при аутпуте из сервлета :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 16:18 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
andreykaTвся магия кайскласса в том что это какой-то функциональный кастрат непонятно для чего прикрученный, по полям (количество полей=таплу) ограничение, по наследованию ограничение.. по чем там еще ограничение видимо, предстоит узнать в будущем. класс-инвалид. джава с ломбоком своим не так то уж и плоха оказывается. Ну так кейс класс не для наследования создавался:) А как value-object для паттерн-матчинга и великолепно выполняет свои задачи. Для расширения функциональности в случае better-java используются обычные абстрактные классы либо typeclass pattern в случае ФП. Костыли это как раз методы hashCode toString и equals обьявленные в Object. Неимоверное количество багов из-за этого. Написать корректный equals в иерархии классов - дело вообще практически невозможное. Ну и в целом при переходе на scala придется переходить на специфичные либы для сериализации, http-роутинга и работы с базой. Использовать скалу но подходы и с java - действительно контрпродуктивно и мозговзрывательно. Ну по поводу кейс коассов и т.п - ну поломает тебя немного, но пройдет, меня тоже ломало и бесило, сейчас понимаю почему решения приняты именно такие ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 16:40 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
...и да хорошо это всё хорошо. но выходит, что нет простого способа в скале нормально добавить поле всем классам? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 19:09 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
да.. )) слик это убийство мозга (). еще и бойлерплейта дофига. в сравнении с тем же богомерзским хибером. ну оно и понятно наверное. сколько лет хиберу и спринг дате и сколько лет слику. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 19:19 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
andreykaT...и да хорошо это всё хорошо. но выходит, что нет простого способа в скале нормально добавить поле всем CASE- классам? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 19:42 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
Случайно отправилось. Да, нельзя, потому что как я уже сказал case классы для другого предназначены. А про slick немного не понял, нету там дикого бойлерплейта, или ты про то что надо описывать типы и названия всех полей? Ну так зато все типобезопасно. Со slick я мучался пока не понял концепцию DBIO (по привычке все время хотелось сделать блокирующий Await.result вместо композиции фьючеров). Теперь на хибернейт даже и смотреть не хочется без рези в глазах ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 19:49 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
вроде хибер тоже теперь может футуры возвращать. это для ценителей матрёшек я конечно подозреваю что я еще не до конца разобрался или вообще не разобрался. но эти вырвиглазные апсерты через фор компрехенжн это какой то разрыв здравого смысла. опять же транзакшнл который откатывает в случае ексепшена который может пройти и не по причине бд я так и не понял как сделать со сликом без смешивания репозитория и сервис-слоя. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 20:01 |
|
SCALA: trait+case class inheritance
|
|||
---|---|---|---|
#18+
andreykaTстолкнуля с вроде бы банальной задачей (для джавы конечно же банальной). есть мешок кейсклассов. надо их все расширить одним полем показывающем их версию которая берется из одного места. следом объект кейскласса улетает в яхон сериализатор и отдается клиенту. я как джавист посмотрел как делается наследование - сделал через трейт там добавил поле. создаю инстанс кейскласса - обращаюсь к полю вер - возвращает. делаю тустринг - НЕТУ. кидаю инстанс класса в сериализатор - он пережевывает всё кроме этого поля. что за фигня. как такая задача решается в скале? Кейс-классы надо рассматривать просто как именованные кортежи и все. Они не для развесистых иерархий. Если версия - атрибут объекта, то объявляй ее явно в каждом кейс-классе. Если одна для пачки классов (ну типа версии API) - то просто приклеивай к уже готовому JSON объекту. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 01:11 |
|
|
start [/forum/topic.php?fid=59&msg=39754274&tid=2121557]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 155ms |
0 / 0 |