powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
13 сообщений из 13, страница 1 из 1
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39233410
romashov90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот разработали Protobuf-Converter который преобразует Domain Object в Google Protobuf Message.

Пример:

@ProtoClass(ProtobufUser.class) public class User {

@ProtoField private String name; @ProtoField private String password;

// getters and setters for 'name' and 'password' fields ... }

Код для конвертирования такого доменного объекта в Protobuf объект будет выглядеть следующим образом:

User userDomain = new User(); ...

ProtobufUser userProto = Converter.create().toProtobuf(ProtobufUser.class, userDomain);

Код для обратного преобразования:

User userDomain = Converter.create().toDomain(User.class, userProto);

Более подробно ознакомится с ним можно тут https://github.com/BAData/protobuf-converter
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39233426
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
протобуф сделан для максимально быстрой сериализации, а вы его рефлекшном.... беда
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39233451
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
romashov90Вот разработали Protobuf-Converter который преобразует Domain Object в Google Protobuf Message.

И нигде не написано зачем именно вы это сделали.
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39233878
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
romashov90,
Domain objects aka entity как бы не должны вылезать за пределы сервис лэйера.
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39233917
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892romashov90,
Domain objects aka entity как бы не должны вылезать за пределы сервис лэйера.
Очень странное заявление. Первый раз такое слышу.
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234258
romashov90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Penkov Vladimirпротобуф сделан для максимально быстрой сериализации, а вы его рефлекшном.... беда
Кроме того, данные при передаче занимают меньше места и протокол кросплатформенный. Но да, использование рефлексии снижает скорость работы

BlazkowiczИ нигде не написано зачем именно вы это сделали.

Попытались разделить DTO и Domain objects
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234262
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczno56892romashov90,
Domain objects aka entity как бы не должны вылезать за пределы сервис лэйера.
Очень странное заявление. Первый раз такое слышу.
Уменьшает связанность. Фронтэнд (контроллер) не зависит от структуры БД и от шняги JPA'евской. У Вас >= 2 версий АПИ, что будете делать?
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234271
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Уменьшает связанность.
Ценой раздувания кода делающего одно и то же. Ограничивает область переиспользования бизнес-логики. Если только у вас 100% anemic domain model.

no56892Фронтэнд (контроллер) не зависит от структуры БД и от шняги JPA'евской.
В чем такая зависимость проявляется?

no56892У Вас >= 2 версий АПИ, что будете делать?
Зависит от протокола. Обычно, это просто обратная совместимость. В более сложных случаях фасады и адаптеры.
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234525
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Ограничивает область переиспользования бизнес-логики
Как это проявляется?

>>В чем такая зависимость проявляется?
В том, что есть war например с контроллерами, и jar с сервисами, если вы возвращаете/передаете параметром в сервис домэин обжект, то надо в зависимости к war проекту добавлять jpa -api. А нафига?

>>Если только у вас 100% anemic domain model.
Фаулер ИМХО теоретик жуткий, это типа он говорит бэд практис, т.к. данные отделены от их обработки, возьмем валидацию, например, длинны пароля, которая настраивается динамически, Вы будете инжектить коннект к базе в ентити User что бы в нем проверить?

Я вообще вот о чем:
Код: java
1.
2.
3.
4.
5.
//сервис

public void addUser(JSONObject input) throws ValidationException, ServiceException {} // или dto AddUserRequest

далее в контроллере вообще нет зависимостей от имплементации сервисов.


В контроллере подключаем service-api. То есть:

Браузер <-- (Json/rawdata) --> Контроллер <--JSonObject/Dto/просто параметры если простая структура--> Сервис-апи
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234568
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892>>Ограничивает область переиспользования бизнес-логики
Как это проявляется?
Ну, вот так, что в Rich Domain Model у тебя в сущностях куча поведения. И это поведение тебе нужно на всех слоях приложения.
Например, вычислимые состояния. То есть, некоторое свойство, которое вычисляется из зависимостей и в БД не хранится.
И так случается что от этой логики у тебя зависит и лампочка на UI и способ сохранения в БД.
В случае с Anemic, ты эту логику отдираешь от объекта и пихаешь в DomainObjectUtils убивая инкапсуляцию. Там выходит тупо жирный код оперирующей массой свойств, вместо простого метода класса DomainObject, оперирующего полями.

no56892В том, что есть war например с контроллерами, и jar с сервисами, если вы возвращаете/передаете параметром в сервис домэин обжект, то надо в зависимости к war проекту добавлять jpa -api. А нафига?
Это какая-то ересь. war и ejb-jar это JEE модули. А JPA это часть JEE спецификации. JPA API тебе предоставляет контейнер.

no56892Фаулер ИМХО теоретик жуткий

Чем больше я узнаю, тем больше мне приходится с ним соглашаться. Пока не было опыта написания достаточно сложным многозвенных проектов, то и понимания зачем это нужно тоже не было.

no56892, это типа он говорит бэд практис, т.к. данные отделены от их обработки, возьмем валидацию, например, длинны пароля, которая настраивается динамически, Вы будете инжектить коннект к базе в ентити User что бы в нем проверить?
Тут всё просто. Если метод манипулирует полями класса, то он должен быть в этом классе. Проблема Anemic Model в том что таких методов вообще нет.


no56892Я вообще вот о чем:
Код: java
1.
2.
3.
//сервис
public void addUser(JSONObject input) throws ValidationException, ServiceException {} // или dto AddUserRequest
далее в контроллере вообще нет зависимостей от имплементации сервисов.


В контроллере подключаем service-api. То есть:
Браузер <-- (Json/rawdata) --> Контроллер <--JSonObject/Dto/просто параметры если простая структура--> Сервис-апи
Да, понятно. DTO это про Transfer, когда несериализуемая сущность превращается в сериализуемую для удаленной передачи. Использовать DTO внутри одной JVM это слегка за гранью моего понимания. Вопрос о том что мешает сериализовать сущности в JSON остается неотвеченным.
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234589
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу, вот так, что в Rich Domain Model у тебя в сущностях куча поведения. И это поведение тебе нужно на всех слоях приложения.
Например, вычислимые состояния. То есть, некоторое свойство, которое вычисляется из зависимостей и в БД не хранится.
И так случается что от этой логики у тебя зависит и лампочка на UI и способ сохранения в БД.
В случае с Anemic, ты эту логику отдираешь от объекта и пихаешь в DomainObjectUtils убивая инкапсуляцию. Там выходит тупо жирный код оперирующей массой свойств, вместо простого метода класса DomainObject, оперирующего полями.

Дак никто не мешает сделать это методом ентити или сервиса.

авторЭто какая-то ересь. war и ejb-jar это JEE модули. А JPA это часть JEE спецификации. JPA API тебе предоставляет контейнер.
Народ делает war проект, подключает service-api и все, зачем им нужен jpa-api? У них есть их сервлеты, фильтры и апи сервисов.

авторЧем больше я узнаю, тем больше мне приходится с ним соглашаться. Пока не было опыта написания достаточно сложным многозвенных проектов, то и понимания зачем это нужно тоже не было.
Ну не знаю, я не мастер конечно какой, но чем больше проекты я видел, тем там меньше структуры и больше нашлепок и заплаток.

авторТут всё просто. Если метод манипулирует полями класса, то он должен быть в этом классе. Проблема Anemic Model в том что таких методов вообще нет.
Ну так все таки, что делать с валидацией пароля?

авторДа, понятно. DTO это про Transfer, когда несериализуемая сущность превращается в сериализуемую для удаленной передачи. Использовать DTO внутри одной JVM это слегка за гранью моего понимания. Вопрос о том что мешает сериализовать сущности в JSON остается неотвеченным.
Отделить апи от реализации, домэйн обжект это внутренняя реализация сервисов, она не должна смотреть наружу вообще никак. Вот, например, у вас сервис возвращет курсы валют в виде энтити, и, вдруг, вы решили не из базы брать их а из стороннего веб сервиса, а придется менять и всех клиентов, которые используют этот метод или оставлять ентити, который уже не ентити на самом деле. Пару десятков таких изменений, и структура становится все менее ясной.
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234610
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Дак никто не мешает сделать это методом ентити или сервиса.

Мешает то что у тебя нет сущности в web модуле. Только DTO. Поэтому подобная логика у тебя реализована в сервисе, который не делает ничего полезного, кроме как оперирует методами DTO?

no56892Народ делает war проект, подключает service-api и все, зачем им нужен jpa-api? У них есть их сервлеты, фильтры и апи сервисов.
Ты повторяешь свой вопрос. Я могу повторить свой ответ.

no56892но чем больше проекты я видел, тем там меньше структуры и больше нашлепок и заплаток.

Ну, о том и речь.

no56892Ну так все таки, что делать с валидацией пароля?
За валидацию сущностей отвечает слой валидации. Если его надо конфигурировать, он конфигурируется. Валидация это вполне специфичная и конкретная задача. Я же говорю о методах сильно связанных с предметной областью.

no56892Отделить апи от реализации

А смысл? Это API является независимым от реализации? Или реализация является не зависимой от API, которое она реализует? Бред же. API не функционирует без реализации, а реализация вообще железными гвоздями намертво прибита к API, который она реализует.
Возможно речь идёт о "фасаде"? Рано вы Фаулера сожгли-то.

no56892, домэйн обжект это внутренняя реализация сервисов,
Да, хрень это полная. Требования предметной области влияет на все слои приложения. И переиспользование сущностей во всех слоях это отличная возможность пере-использовать логику предметной области, а не размазывать её по всем слоям и не повторять в разных вариациях.

no56892она не должна смотреть наружу вообще никак.
Если у тебя вся бизнес-логика умещается в Transaction Script aka Service, то тебе просто повезло. А вот у меня в ERP были методы которые нужно использовать в куче слоёв:
GUI
TransactionScript
Data Replication
Data Conversion
И наличие методов в сущностях здорово повышает переиспользование и невероятно упрощает код. А делать все эти слои зависимыми от TransactionScript это слегка за гранью.

no56892Вот, например, у вас сервис возвращет курсы валют в виде энтити, и, вдруг, вы решили не из базы брать их а из стороннего веб сервиса, а придется менять и всех клиентов, которые используют этот метод или оставлять ентити, который уже не ентити на самом деле. Пару десятков таких изменений, и структура становится все менее ясной.
Не врубаюсь, что менять-то придется. Кто мне запретит те же самые энтити создавать из любого другого источника данных???
...
Рейтинг: 0 / 0
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
    #39234615
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Ой, все
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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