|
скала плей
|
|||
---|---|---|---|
#18+
в общем есть простое мвс приложение... ну какой то там контроллер какой то там сервис выдающий объект контроллеру, там в контроллере этот объект превращается в джейсон OK(Json.toJson(obj)) и возвращается клиенту. вроде всё банально. теперь... у меня у этого obj есть поле х потому что он имплементит интерфейс, и мне в это поле что то надо положить. НО. я не хочу этого делать на уровне сервиса. это не его ума дело. я хочу это сделать где то либо между сервисом и контроллером либо между контроллером и клиентом. т.е. как это в джаве сделать я представляю. ну там аспект в крайнем случае. интерцептор или на уровне сериализатора. а тут как лучше? ну или скажем так, правильнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:49 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaT, Правильнее формировать объект в одном месте. Либо разбить на два объекта. Если хакнуть, то монопесуально где. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:00 |
|
скала плей
|
|||
---|---|---|---|
#18+
возможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:02 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaT, я про скалу\плей ничего не знаю, но хочу ответить ибо! Вопрос ведь не в том, как правильно, а в том, почему это вдруг правильно? Если брать яву, то собирать нечто в json, на мой взгляд, лучше на уровне сервиса. Причина довольно проста - бывают доменные сущности у которых есть связи с другими сущностями и во время сбора потребуется эти связные сущности получить. Чтобы дернуть эти связные сущности, по сути - надо либо их сразу загрузить(прощай LAZY LOAD), либо сделать повторный запрос к базе. Чтобы сделать повторный запрос, допустим, если вы используете хибер, вы либо не должны завершать предыдущую сеcсию, для чего в спринге была по умолчанию настройка(open-in-view, вроде), которая НЕ закрывала сессию после получения объекта и можно было дернуть lazy-load связные сущности. НУ и плохо во всем это то, что такие повторные запросы могут очень серьезено нагружать бд (проходят то они уже в ауткоммит моде и грузят диск, вроде как? Ну и вообще: обычная N+1 проблема тоже лишняя). Потому, есть мнение, что правильно с точки зрения знаю-не-знаю ничего о том, какая нужна сущность на VIEW - по мне так под большим вопросом и требуется думать над плюсами и минусами. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:12 |
|
скала плей
|
|||
---|---|---|---|
#18+
А может так и вовсе DTO собирать сразу на уровне репозитория, тогда придется писать запросы руками, но этот путь - наиболее корректный. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:14 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaTвозможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.ты разве этим ответом пояснил почему все в одном классе? Ты счас повторил что там данные не имеющие отношение к классу. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:21 |
|
скала плей
|
|||
---|---|---|---|
#18+
Озверин, там можно еще дальше пойти - например на уровне контроллера сходить в базу и всё сразу там и сделать. тогда ни репы ни сервиса вообще не надо будет. а че и удобно и сразу под рукой )) я как то делал похожее решение, ну оно было таким потому что мне сказали что хотят видеть его таким. так вот - решение заключалось в том, что на уровне фильтра ловился исходящий объект и там уже по интерфейсу вытаскивался и добавлялись нужные данные в поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:24 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaT, Если Модель кривая, можно и в фильтре доделать. Можно даже в прокси доделать. На любом участке пути следования. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:28 |
|
скала плей
|
|||
---|---|---|---|
#18+
Petro123andreykaTвозможно да. но там поле с техническими скажем так данными не имеющими отношения к сервису где забиваются поля скажем так бизнеслогики.ты разве этим ответом пояснил почему все в одном классе? Ты счас повторил что там данные не имеющие отношение к классу. да. не имеющие прямого отношения к конкретно этому классу но которые надо отдать одновременно с объектом этого класса и которые зависят от этого класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:30 |
|
скала плей
|
|||
---|---|---|---|
#18+
в общем, задача. у меня есть некий объект который я должен отдать юзеру. вместе с этим объектом я хочу отдать юзеру информацию о том что конкретно он может делать с этим объектом. она берется из другой таблицы. да там дозапрос. но это ничего страшного. в итоге юзер получает объект джейсон где собссно сам объект с полями и еще дополнительное поле с объектом разрешений что конкретно этому юзеру можно с ним делать. я такое делал на джаве и делал через интерцепторы. т.е. отлавливался объект смотрелось имплементит ли он нужный мне интерфейс и если да то уже потом вытряхивал из объекта его тип и ид и по этим двум параметрам вычислял что с ним делать можно тому кто его запросил. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:33 |
|
скала плей
|
|||
---|---|---|---|
#18+
но джава спринг это джава спринг. в плее я смотрю есть какие то экшены. пока не понял что это. либо может быть заимплементить свой сериализатор вместо джейсон.туджейсон (привет делегат или имплиситы) там посмотреть на объект поближе и добавить недостающее. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:35 |
|
скала плей
|
|||
---|---|---|---|
#18+
почему я не хочу делать это в сервисе? потому что сервисов много. я хочу просто иметь какие то сущности и если они имеют нужный мне интерфейс - делать с ними доп.манипуляции при возврате клиенту. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:37 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaT, 1000 экземпляров товаров и в каждый товар права что с ЭКЗЕМПЛЯРОМ делать можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:38 |
|
скала плей
|
|||
---|---|---|---|
#18+
Java/Scala сравнивать нельзя ИМХО. Здесь даже не доходя до плей. А еще на уровне обсуждения способов как унаследовать или как что-то передать (на language-level) есть расхождения. То что прокатывало в Scala может вообще не существовать в Java или реализовано не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:42 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaT, Пример бы привел. Я знаю пример json где коллекция товаров идет на клиента. Что у тебя непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:43 |
|
скала плей
|
|||
---|---|---|---|
#18+
mayton, Ну да. Тут наверно про скалу сабж. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:43 |
|
скала плей
|
|||
---|---|---|---|
#18+
Во-первых уже сказали, что объекты пермишенс и payload это разные объекты, и твой сервис должен возвращать только иммьютабл payload, а контроллер в целом может возвращать некий Wrapper(permissions:Set[_], payload: Any :< Result). Теперь к боле важному вопросу, как же и где этот враппер создавать. Вообще, у меня к Play отношение скорее отрицательное чем положительное, на мой взгляд это какой-то выродок, посреди ООП и ФП, но тем не менее, канонически у этой задачи есть два пути решения. 1) https://www.playframework.com/documentation/2.6.x/ScalaHttpFilters - Тупо http-фильтры 2) Привязать к контроллеру akka-stream и сделать последним шагом вытягивание пермишенов и формирование враппера. На самом деле ничего нового и неожиданного тут нет, все прозаично ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 16:55 |
|
скала плей
|
|||
---|---|---|---|
#18+
фильтр да.. и что с ним делать? ловить бади, оборачивать джейсон обратно в объект и доставлять ему дополнительные поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 17:00 |
|
скала плей
|
|||
---|---|---|---|
#18+
акка стрим конечно брутально. ) ну тут есть еще вариант - допилить джейсон сериализатор чтоб он перед тем как сериализовать делал объекту обёртку). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 17:02 |
|
скала плей
|
|||
---|---|---|---|
#18+
Petro123andreykaT, Пример бы привел. Я знаю пример json где коллекция товаров идет на клиента. Что у тебя непонятно. аа. ты об этом. да. можно и так. если коллекция разнотипных объектов то к каждому прикреплять права. много шевелений да. но так надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 17:39 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaT, Если без скалы, то непонятно. Вот ты взял коллекцию 100 об. Товар. И там где сделал доп запрос, добавил Код: java 1. 2. 3.
Сериализатор все это отправит. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 18:54 |
|
скала плей
|
|||
---|---|---|---|
#18+
эээ а кто данные в объект класса права положит?? их же разрезолвить надо в отдельном месте и я не хочу это делать в том же сервисе который забивает товар. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 18:56 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaTэээ а кто данные в объект класса права положит?? их же разрезолвить надо в отдельном месте и я не хочу это делать в том же сервисе который забивает товар. Пример: Сущность - договора. И права это действия с договором. Тогда это бизнес логика. И должно быть в сервисе БЛ. Сущность - договора. И права это роль юзверя. Тогда это не БЛ и юзверь берет права отдельным REST запросом. Хоть сразу на группу товаров, хоть коллекцией с айдишник-права. Тебе решать. Как будто один сервис у тебя не может вызвать второй независимый сервис. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 19:24 |
|
скала плей
|
|||
---|---|---|---|
#18+
andreykaTразрезолвитьрусских слов не хватает? ЗЫ. Не всегда на клиента отправляется сущность как она есть в базе. Иногда ее нужно слепить в толстую бизнес сущность но без поведения. Только данные. Почему вдруг права нужны, но положить внутрь некому и негде у тебя. Может ты эти права сам придумал? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 19:29 |
|
|
start [/forum/topic.php?fid=59&msg=39771245&tid=2121489]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 464ms |
0 / 0 |