Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
в общем есть простое мвс приложение...

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

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

т.е. как это в джаве сделать я представляю. ну там аспект в крайнем случае. интерцептор или на уровне сериализатора. а тут как лучше? ну или скажем так, правильнее?
8 фев 19, 15:49    [21804510]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT,
Правильнее формировать объект в одном месте. Либо разбить на два объекта.
Если хакнуть, то монопесуально где.
8 фев 19, 16:00    [21804527]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
возможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.
8 фев 19, 16:02    [21804533]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
andreykaT, я про скалу\плей ничего не знаю, но хочу ответить ибо!
Вопрос ведь не в том, как правильно, а в том, почему это вдруг правильно? Если брать яву, то собирать нечто в json, на мой взгляд, лучше на уровне сервиса. Причина довольно проста - бывают доменные сущности у которых есть связи с другими сущностями и во время сбора потребуется эти связные сущности получить.

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

Потому, есть мнение, что правильно с точки зрения знаю-не-знаю ничего о том, какая нужна сущность на VIEW - по мне так под большим вопросом и требуется думать над плюсами и минусами.
8 фев 19, 16:12    [21804561]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
А может так и вовсе DTO собирать сразу на уровне репозитория, тогда придется писать запросы руками, но этот путь - наиболее корректный.
8 фев 19, 16:14    [21804570]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
возможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.
ты разве этим ответом пояснил почему все в одном классе?
Ты счас повторил что там данные не имеющие отношение к классу.
8 фев 19, 16:21    [21804580]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
Озверин, там можно еще дальше пойти - например на уровне контроллера сходить в базу и всё сразу там и сделать. тогда ни репы ни сервиса вообще не надо будет. а че и удобно и сразу под рукой ))

я как то делал похожее решение, ну оно было таким потому что мне сказали что хотят видеть его таким. так вот - решение заключалось в том, что на уровне фильтра ловился исходящий объект и там уже по интерфейсу вытаскивался и добавлялись нужные данные в поля.
8 фев 19, 16:24    [21804586]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT,
Если Модель кривая, можно и в фильтре доделать.
Можно даже в прокси доделать.
На любом участке пути следования.
8 фев 19, 16:28    [21804594]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
Petro123
andreykaT
возможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.
ты разве этим ответом пояснил почему все в одном классе?
Ты счас повторил что там данные не имеющие отношение к классу.

да. не имеющие прямого отношения к конкретно этому классу но которые надо отдать одновременно с объектом этого класса и которые зависят от этого класса.
8 фев 19, 16:30    [21804597]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
в общем, задача. у меня есть некий объект который я должен отдать юзеру. вместе с этим объектом я хочу отдать юзеру информацию о том что конкретно он может делать с этим объектом. она берется из другой таблицы. да там дозапрос. но это ничего страшного.

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

я такое делал на джаве и делал через интерцепторы. т.е. отлавливался объект смотрелось имплементит ли он нужный мне интерфейс и если да то уже потом вытряхивал из объекта его тип и ид и по этим двум параметрам вычислял что с ним делать можно тому кто его запросил.
8 фев 19, 16:33    [21804600]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
но джава спринг это джава спринг.

в плее я смотрю есть какие то экшены. пока не понял что это. либо может быть заимплементить свой сериализатор вместо джейсон.туджейсон (привет делегат или имплиситы) там посмотреть на объект поближе и добавить недостающее.
8 фев 19, 16:35    [21804606]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
почему я не хочу делать это в сервисе? потому что сервисов много. я хочу просто иметь какие то сущности и если они имеют нужный мне интерфейс - делать с ними доп.манипуляции при возврате клиенту.
8 фев 19, 16:37    [21804611]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT,
1000 экземпляров товаров и в каждый товар права что с ЭКЗЕМПЛЯРОМ делать можно?
8 фев 19, 16:38    [21804613]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
извини, не понял тебя.
8 фев 19, 16:40    [21804619]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
mayton
Member

Откуда: loopback
Сообщений: 41431
Java/Scala сравнивать нельзя ИМХО. Здесь даже не доходя до плей. А еще на уровне обсуждения
способов как унаследовать или как что-то передать (на language-level) есть расхождения.
То что прокатывало в Scala может вообще не существовать в Java или реализовано не так.
8 фев 19, 16:42    [21804624]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT,
Пример бы привел.
Я знаю пример json где коллекция товаров идет на клиента.
Что у тебя непонятно.
8 фев 19, 16:43    [21804625]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton,
Ну да. Тут наверно про скалу сабж.
8 фев 19, 16:43    [21804627]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
забыл ник
Member

Откуда:
Сообщений: 2865
Во-первых уже сказали, что объекты пермишенс и payload это разные объекты, и твой сервис должен возвращать только иммьютабл payload, а контроллер в целом может возвращать некий Wrapper(permissions:Set[_], payload: Any :< Result).

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

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

На самом деле ничего нового и неожиданного тут нет, все прозаично
8 фев 19, 16:55    [21804648]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
фильтр да.. и что с ним делать? ловить бади, оборачивать джейсон обратно в объект и доставлять ему дополнительные поля?
8 фев 19, 17:00    [21804664]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
акка стрим конечно брутально. ) ну тут есть еще вариант - допилить джейсон сериализатор чтоб он перед тем как сериализовать делал объекту обёртку).
8 фев 19, 17:02    [21804669]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
Petro123
andreykaT,
Пример бы привел.
Я знаю пример json где коллекция товаров идет на клиента.
Что у тебя непонятно.

аа. ты об этом. да. можно и так. если коллекция разнотипных объектов то к каждому прикреплять права. много шевелений да. но так надо.
8 фев 19, 17:39    [21804716]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT,
Если без скалы, то непонятно.
Вот ты взял коллекцию 100 об. Товар. И там где сделал доп запрос, добавил
class Товар{
Композиция class Права
... 

Сериализатор все это отправит.
8 фев 19, 18:54    [21804776]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
andreykaT
Member

Откуда:
Сообщений: 2246
эээ а кто данные в объект класса права положит?? их же разрезолвить надо в отдельном месте и я не хочу это делать в том же сервисе который забивает товар.
8 фев 19, 18:56    [21804777]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
эээ а кто данные в объект класса права положит?? их же разрезолвить надо в отдельном месте и я не хочу это делать в том же сервисе который забивает товар.

Пример:
Сущность - договора. И права это действия с договором. Тогда это бизнес логика. И должно быть в сервисе БЛ.
Сущность - договора. И права это роль юзверя. Тогда это не БЛ и юзверь берет права отдельным REST запросом. Хоть сразу на группу товаров, хоть коллекцией с айдишник-права.
Тебе решать.
Как будто один сервис у тебя не может вызвать второй независимый сервис.
8 фев 19, 19:24    [21804801]     Ответить | Цитировать Сообщить модератору
 Re: скала плей  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
разрезолвить
русских слов не хватает?
ЗЫ.
Не всегда на клиента отправляется сущность как она есть в базе.
Иногда ее нужно слепить в толстую бизнес сущность но без поведения. Только данные.
Почему вдруг права нужны, но положить внутрь некому и негде у тебя.
Может ты эти права сам придумал?
8 фев 19, 19:29    [21804811]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить