Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message / 13 сообщений из 13, страница 1 из 1
11.05.2016, 14:20
    #39233410
romashov90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
Вот разработали 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
11.05.2016, 14:39
    #39233426
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
протобуф сделан для максимально быстрой сериализации, а вы его рефлекшном.... беда
...
Рейтинг: 0 / 0
11.05.2016, 15:00
    #39233451
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
romashov90Вот разработали Protobuf-Converter который преобразует Domain Object в Google Protobuf Message.

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

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

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

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

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

>>В чем такая зависимость проявляется?
В том, что есть 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
12.05.2016, 17:45
    #39234568
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
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
12.05.2016, 18:06
    #39234589
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
авторНу, вот так, что в 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
12.05.2016, 18:28
    #39234610
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
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
12.05.2016, 18:35
    #39234615
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message
Blazkowicz,
Ой, все
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Protobuf-Converter: Преобразует Domain Object в Google Protobuf Message / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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