powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / скала плей
33 сообщений из 33, показаны все 2 страниц
скала плей
    #39771181
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем есть простое мвс приложение...

ну какой то там контроллер какой то там сервис выдающий объект контроллеру, там в контроллере этот объект превращается в джейсон OK(Json.toJson(obj)) и возвращается клиенту. вроде всё банально.

теперь... у меня у этого obj есть поле х потому что он имплементит интерфейс, и мне в это поле что то надо положить. НО. я не хочу этого делать на уровне сервиса. это не его ума дело. я хочу это сделать где то либо между сервисом и контроллером либо между контроллером и клиентом.

т.е. как это в джаве сделать я представляю. ну там аспект в крайнем случае. интерцептор или на уровне сериализатора. а тут как лучше? ну или скажем так, правильнее?
...
Рейтинг: 0 / 0
скала плей
    #39771191
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Правильнее формировать объект в одном месте. Либо разбить на два объекта.
Если хакнуть, то монопесуально где.
...
Рейтинг: 0 / 0
скала плей
    #39771196
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.
...
Рейтинг: 0 / 0
скала плей
    #39771215
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT, я про скалу\плей ничего не знаю, но хочу ответить ибо!
Вопрос ведь не в том, как правильно, а в том, почему это вдруг правильно? Если брать яву, то собирать нечто в json, на мой взгляд, лучше на уровне сервиса. Причина довольно проста - бывают доменные сущности у которых есть связи с другими сущностями и во время сбора потребуется эти связные сущности получить.

Чтобы дернуть эти связные сущности, по сути - надо либо их сразу загрузить(прощай LAZY LOAD), либо сделать повторный запрос к базе. Чтобы сделать повторный запрос, допустим, если вы используете хибер, вы либо не должны завершать предыдущую сеcсию, для чего в спринге была по умолчанию настройка(open-in-view, вроде), которая НЕ закрывала сессию после получения объекта и можно было дернуть lazy-load связные сущности. НУ и плохо во всем это то, что такие повторные запросы могут очень серьезено нагружать бд (проходят то они уже в ауткоммит моде и грузят диск, вроде как? Ну и вообще: обычная N+1 проблема тоже лишняя).

Потому, есть мнение, что правильно с точки зрения знаю-не-знаю ничего о том, какая нужна сущность на VIEW - по мне так под большим вопросом и требуется думать над плюсами и минусами.
...
Рейтинг: 0 / 0
скала плей
    #39771219
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может так и вовсе DTO собирать сразу на уровне репозитория, тогда придется писать запросы руками, но этот путь - наиболее корректный.
...
Рейтинг: 0 / 0
скала плей
    #39771224
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTвозможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.ты разве этим ответом пояснил почему все в одном классе?
Ты счас повторил что там данные не имеющие отношение к классу.
...
Рейтинг: 0 / 0
скала плей
    #39771228
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин, там можно еще дальше пойти - например на уровне контроллера сходить в базу и всё сразу там и сделать. тогда ни репы ни сервиса вообще не надо будет. а че и удобно и сразу под рукой ))

я как то делал похожее решение, ну оно было таким потому что мне сказали что хотят видеть его таким. так вот - решение заключалось в том, что на уровне фильтра ловился исходящий объект и там уже по интерфейсу вытаскивался и добавлялись нужные данные в поля.
...
Рейтинг: 0 / 0
скала плей
    #39771234
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Если Модель кривая, можно и в фильтре доделать.
Можно даже в прокси доделать.
На любом участке пути следования.
...
Рейтинг: 0 / 0
скала плей
    #39771237
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andreykaTвозможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.ты разве этим ответом пояснил почему все в одном классе?
Ты счас повторил что там данные не имеющие отношение к классу.
да. не имеющие прямого отношения к конкретно этому классу но которые надо отдать одновременно с объектом этого класса и которые зависят от этого класса.
...
Рейтинг: 0 / 0
скала плей
    #39771239
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, задача. у меня есть некий объект который я должен отдать юзеру. вместе с этим объектом я хочу отдать юзеру информацию о том что конкретно он может делать с этим объектом. она берется из другой таблицы. да там дозапрос. но это ничего страшного.

в итоге юзер получает объект джейсон где собссно сам объект с полями и еще дополнительное поле с объектом разрешений что конкретно этому юзеру можно с ним делать.

я такое делал на джаве и делал через интерцепторы. т.е. отлавливался объект смотрелось имплементит ли он нужный мне интерфейс и если да то уже потом вытряхивал из объекта его тип и ид и по этим двум параметрам вычислял что с ним делать можно тому кто его запросил.
...
Рейтинг: 0 / 0
скала плей
    #39771242
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но джава спринг это джава спринг.

в плее я смотрю есть какие то экшены. пока не понял что это. либо может быть заимплементить свой сериализатор вместо джейсон.туджейсон (привет делегат или имплиситы) там посмотреть на объект поближе и добавить недостающее.
...
Рейтинг: 0 / 0
скала плей
    #39771244
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему я не хочу делать это в сервисе? потому что сервисов много. я хочу просто иметь какие то сущности и если они имеют нужный мне интерфейс - делать с ними доп.манипуляции при возврате клиенту.
...
Рейтинг: 0 / 0
скала плей
    #39771245
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
1000 экземпляров товаров и в каждый товар права что с ЭКЗЕМПЛЯРОМ делать можно?
...
Рейтинг: 0 / 0
скала плей
    #39771248
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извини, не понял тебя.
...
Рейтинг: 0 / 0
скала плей
    #39771250
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java/Scala сравнивать нельзя ИМХО. Здесь даже не доходя до плей. А еще на уровне обсуждения
способов как унаследовать или как что-то передать (на language-level) есть расхождения.
То что прокатывало в Scala может вообще не существовать в Java или реализовано не так.
...
Рейтинг: 0 / 0
скала плей
    #39771251
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Пример бы привел.
Я знаю пример json где коллекция товаров идет на клиента.
Что у тебя непонятно.
...
Рейтинг: 0 / 0
скала плей
    #39771253
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Ну да. Тут наверно про скалу сабж.
...
Рейтинг: 0 / 0
скала плей
    #39771265
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых уже сказали, что объекты пермишенс и payload это разные объекты, и твой сервис должен возвращать только иммьютабл payload, а контроллер в целом может возвращать некий Wrapper(permissions:Set[_], payload: Any :< Result).

Теперь к боле важному вопросу, как же и где этот враппер создавать. Вообще, у меня к Play отношение скорее отрицательное чем положительное, на мой взгляд это какой-то выродок, посреди ООП и ФП, но тем не менее, канонически у этой задачи есть два пути решения.

1) https://www.playframework.com/documentation/2.6.x/ScalaHttpFilters - Тупо http-фильтры
2) Привязать к контроллеру akka-stream и сделать последним шагом вытягивание пермишенов и формирование враппера.

На самом деле ничего нового и неожиданного тут нет, все прозаично
...
Рейтинг: 0 / 0
скала плей
    #39771273
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фильтр да.. и что с ним делать? ловить бади, оборачивать джейсон обратно в объект и доставлять ему дополнительные поля?
...
Рейтинг: 0 / 0
скала плей
    #39771277
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
акка стрим конечно брутально. ) ну тут есть еще вариант - допилить джейсон сериализатор чтоб он перед тем как сериализовать делал объекту обёртку).
...
Рейтинг: 0 / 0
скала плей
    #39771301
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andreykaT,
Пример бы привел.
Я знаю пример json где коллекция товаров идет на клиента.
Что у тебя непонятно.
аа. ты об этом. да. можно и так. если коллекция разнотипных объектов то к каждому прикреплять права. много шевелений да. но так надо.
...
Рейтинг: 0 / 0
скала плей
    #39771330
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Если без скалы, то непонятно.
Вот ты взял коллекцию 100 об. Товар. И там где сделал доп запрос, добавил
Код: java
1.
2.
3.
class Товар{
Композиция class Права
... 


Сериализатор все это отправит.
...
Рейтинг: 0 / 0
скала плей
    #39771331
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эээ а кто данные в объект класса права положит?? их же разрезолвить надо в отдельном месте и я не хочу это делать в том же сервисе который забивает товар.
...
Рейтинг: 0 / 0
скала плей
    #39771348
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTэээ а кто данные в объект класса права положит?? их же разрезолвить надо в отдельном месте и я не хочу это делать в том же сервисе который забивает товар.
Пример:
Сущность - договора. И права это действия с договором. Тогда это бизнес логика. И должно быть в сервисе БЛ.
Сущность - договора. И права это роль юзверя. Тогда это не БЛ и юзверь берет права отдельным REST запросом. Хоть сразу на группу товаров, хоть коллекцией с айдишник-права.
Тебе решать.
Как будто один сервис у тебя не может вызвать второй независимый сервис.
...
Рейтинг: 0 / 0
скала плей
    #39771354
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTразрезолвитьрусских слов не хватает?
ЗЫ.
Не всегда на клиента отправляется сущность как она есть в базе.
Иногда ее нужно слепить в толстую бизнес сущность но без поведения. Только данные.
Почему вдруг права нужны, но положить внутрь некому и негде у тебя.
Может ты эти права сам придумал?
...
Рейтинг: 0 / 0
скала плей
    #39771414
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще делать мне больше нечего всякую дичь придумывать. права используются фронтендерами чтоб корректно отрисовать интерфейс без всяких там дозапросов. права не только крад но и кастомные.

ну в общем, еще как вариант вижу всё таки докручивать доп сервис и класть сущность в него, а он уже делает обертку, или тупо к джейсону прикручивает набор полей и возвращает респонз. топорно. но наверное, это лучшее. более прозрачно и неявно как это сделать я вариантов не вижу.

ну или снова имплиситы заюзать. и вместо Json.toJson(entity) сделать Json.toJsonWithAccessAttributes(entity) что в принципе тоже самое что сверху. подпорка.
...
Рейтинг: 0 / 0
скала плей
    #39771458
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaTвот еще делать мне больше нечего всякую дичь придумывать. права используются фронтендерами чтоб корректно отрисовать интерфейс без всяких там дозапросов. права не только крад но и кастомные.

ну в общем, еще как вариант вижу всё таки докручивать доп сервис и класть сущность в него, а он уже делает обертку, или тупо к джейсону прикручивает набор полей и возвращает респонз. топорно. но наверное, это лучшее. более прозрачно и неявно как это сделать я вариантов не вижу.

ну или снова имплиситы заюзать. и вместо Json.toJson(entity) сделать Json.toJsonWithAccessAttributes(entity) что в принципе тоже самое что сверху. подпорка.

Не пойму этих терзаний. Все правильно ИМХО описал. Если случай простой и единичный то модифицируем JSON перед отдачей клиенту, если что-то более-менее периодическое, то implicit classes вполне решение, к тому же изолированное и то модели и от контроллера, которое можно вынести в отделный пакадж и подключать по мере необходимости.
...
Рейтинг: 0 / 0
скала плей
    #39771478
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTвот еще делать мне больше нечего всякую дичь придумывать.
тут имхо столкнулись паттерны статики динамики.
Я рассказал о классике Java и статике проектирования, но скала это динамика.
При обычном проектировании предпочтительнее заранее проектирование Модели и выше, выше по стеку до клиента.
При динамике ты вклиниваешься в процесс и добавляешь инфу (а ля рефлексия).
Ну а Скала:
авторScala богата выразительными средствами, за что ее и не любят опытные программисты на классических ООП-языках . Неявные параметры и преобразования — одна из самых спорных фич языка. Слово "неявные", уже как-бы намекает на что-то неочевидное и сбивающее с толку.
))
Ты так и не сказал в чём проблема, из твоего сервиса вызвать другой сервис чтобы полностью сформировать классы отправки.
Все решения хороши. Тебе решать.
IMHO
...
Рейтинг: 0 / 0
скала плей
    #39771945
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да спасибо. сделал уже. просто сделал сервис прослойку который оборачивает джейсон нужными полями.

теперь другую хрень нашел в этой убогой скале.

оказвыается передать тип просто как в джаве нельзя. или я не понял как.

передаю объект по интерфейсу маркеру, потом серализатору говорю что это объект с типом Т, тип Т чуть выше через самого интерфейса передаю. а эта скотина говорит что для такого типа нету сериализатора. а он имплиситли есть.
если явно скастовать в тип через .асИнстансОф[НазваниеКласса] - то работает. если кастовать в Т -- то не работает хотя Т = НазваниеКласса.
это какой то гон. с джавы рефлексию чтоль подключить. или через паттерн матчинг кастовать. да бред какой то.

почему зная класс объекта, видя этот класс объекта я не могу в него скастовать средствами скалы???
...
Рейтинг: 0 / 0
скала плей
    #39771947
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строгий вывод типов мать ево.
...
Рейтинг: 0 / 0
скала плей
    #39771950
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сказал что он очень строгий ))

значит я снова чот не то делаю. ладно, попробую зайти с другого края.
...
Рейтинг: 0 / 0
скала плей
    #39771953
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще это принципы ФП. Они должны стоять выше чем возможности Java-рефлексии.

Хотя я возможно не совсем понял где ты что делаешь и как. Сорц бы помог.
...
Рейтинг: 0 / 0
скала плей
    #39771964
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaTда спасибо. сделал уже. просто сделал сервис прослойку который оборачивает джейсон нужными полями.

теперь другую хрень нашел в этой убогой скале.

оказвыается передать тип просто как в джаве нельзя. или я не понял как.

передаю объект по интерфейсу маркеру, потом серализатору говорю что это объект с типом Т, тип Т чуть выше через самого интерфейса передаю. а эта скотина говорит что для такого типа нету сериализатора. а он имплиситли есть.
если явно скастовать в тип через .асИнстансОф[НазваниеКласса] - то работает. если кастовать в Т -- то не работает хотя Т = НазваниеКласса.
это какой то гон. с джавы рефлексию чтоль подключить. или через паттерн матчинг кастовать. да бред какой то.

почему зная класс объекта, видя этот класс объекта я не могу в него скастовать средствами скалы???

Дык откуда известно про сериализатор для ХЗ какого типа Т во время компиляции? Если используешь play.api.libs.json, то сигнатура Json.toJson требует инмлиситный параметр Writes[T].
Код: scala
1.
Json.toJson[T](o: T)(implicit tjs: Writes[T]): JsValue


вот и передавай своему методу тотже имплиситный параметр или указывай явно.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / скала плей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]