powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / скала плей
25 сообщений из 33, страница 1 из 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
25 сообщений из 33, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / скала плей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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