powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / филосовский вопрос по проектированию
25 сообщений из 46, страница 1 из 2
филосовский вопрос по проектированию
    #39894555
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения, записываю в что-то типа хранилища с историей сущностей, плюс куски бизнес логики которая дозаполняет какие-то сущности в crm, создает в crm задачи, стартует бизнес процессы в crm. так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm), почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана. потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект, который по мере обработки рест вызова "обогащается", вместо того что бы передавать лишь необходимый минимум ? как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход.
есть какие-то бест практики на эту тему?
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39894570
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения, записываю в что-то типа хранилища с историей сущностей, плюс куски бизнес логики которая дозаполняет какие-то сущности в crm, создает в crm задачи, стартует бизнес процессы в crm. так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm), почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана. потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект, который по мере обработки рест вызова "обогащается", вместо того что бы передавать лишь необходимый минимум ? как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход.
есть какие-то бест практики на эту тему?


Проектирование API это всегда вещь деликатная и зависящая от многих факторов. Тут надо учитывать множество факторов, вы правильно указали на некоторые из них
1) Чем больше параметров на входе - тем сложнее понять что функция делает, тем сложнее ее отрефакторить ну и в целом разобраться что тут вообще происходит
2) Если у вас происходит дублирование кода и практически всегда некоторые поля передаются - значит надо сделать какой-то тип BaseRequest и включить их туда, но тут главное не переборщить - включать поле надо если оно приходит в 80% и выше. Возможно стоит сделать два абстрактных реквеста - один включает только транзакшен, второй и транзакшен и ордер айди. Ну и т.д. Каких-то бест практисес особо не существует, кроме задействования мозга по назначению
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39894581
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm)
Зачем?
hck1
почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана

Зачем?
Наверно не номер, а ID заказа.
А по этому ID можно поднять все что нужно и не передавать цепочкой по стеку методов.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39894599
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник

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

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

PetroNotC Sharp
hck1
почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm)
Зачем?

понял что любое сообщение от логера надо сопровождать "номером транзакции", что бы потом иметь возможность понять как такое вышло. crm может подтормаживать и сыпать свои сообщения не в том порядке в каком реально они произошли. а поскольку лог выводит почти везде хоть что-то ...

PetroNotC Sharp

Зачем?
Наверно не номер, а ID заказа.
А по этому ID можно поднять все что нужно и не передавать цепочкой по стеку методов.

в "хранилище" пока не вся инфа хранится, выходит что по ID далеко не всегда можно поднять. а лишние рест реквесты совсем не хотелось бы плодить, да и ситуация в crm уже может изменится.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39894608
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
логера
блин. Я думаю, кто тут дурак, я или ты?
Начал искать слово логер.
Причем тут логирование вообще?
Ты в курсе что у логировщиков это уже заложено. В одном месте положил число и никуда протаскивать не надо.
Ты прогу для уборщицы логировщика пишешь?
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895017
Марс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)
hck1
как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход.
есть какие-то бест практики на эту тему?

Чтоб было ясно что требуется на вход на вход нужно принимать интерфейс , а уж имплементить его созданой конкретно под этот запрос DTO-шкой или монстриком имплементящим ещё дюжину других интерфейсов уже личное дело каждого.
2)идеологический вопрос я так понимаю тут передавать ли внутрь айдишник и потом изнутри добывать инфу связаную с айдишником или передавать эту инфу явно. Имхо зависит от того насколько вы доверяете внутренностям методов и являются ли поля ридонли - а то бывают заморочки что один метод поменял поля но не сохранил их в базу, а сам ордер поменял кто-то ещё паралельно ручками в другом контексте, а кто-то взял из базы старое значение...
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895026
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марс
2)идеологический вопрос я так понимаю тут передавать ли внутрь айдишник и потом изнутри добывать инфу связаную с айдишником или передавать эту инфу явно.
или не передавать вообще.
Так как инфа нужна ДЛЯ ЛОГИРОВАНИЯ а не БЛ.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895029
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект
Нормальная функциональщина. Ничего такого. Некоторые пишут так и даже живут вполне полноценно. Но java тебе тут не помошник.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895069
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
какой-то обобщенный объект, который по мере обработки рест вызова "обогащается"

честно говоря, у меня в голове плохо укладывается REST (stateless) и "по мере обработки...обогащается"
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895122
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1,

Ты плавно двигаешься от rest к SOAP.

Это не страшно. Иногда жизнь диктует протоколы.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895181
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Марс
2)идеологический вопрос я так понимаю тут передавать ли внутрь айдишник и потом изнутри добывать инфу связаную с айдишником или передавать эту инфу явно.
или не передавать вообще.
Так как инфа нужна ДЛЯ ЛОГИРОВАНИЯ а не БЛ.

да полно там логики, успокойся. а про MDC, ok. не знал. спасибо за наводку.

всем.
сценарии обработки примерно такие - прилетает от crm рест вызов о том, что задача ид 100500 изменилась. далее я идет обработка этой "транзакции". я дергаю рест и получаю детали по задачи, если она связана с заказом, запрашиваю детали заказа, товары привязанные к заказу. тут я могу обнаружить что в моем "хранилище" другой рассклад по позициям, я фиксирую что пришло, что ушло из заказа в "хранилище". т.е. вроде как и вызов был на тему задачи, но у меня уже собраны детальные данные и по заказу и по товарам заказа. и очень вероятно когда я все таки добирусь до обработки самой задачи, то много чего из заказа понадобится, почти наверняка упаковщик заказа.
вобщем наверно действительно нужен тот BaseRequest и туда по мере "открытий" складывать имутабл сущности, с которыми эта "транзакция" сталкивалась по мере обработки. т.е. если понадобились товары из заказа, складывать их BaseRequest и подсовывать весь BaseRequest дальнейшем объектам бизнес логики, например обработчикам задач
да. а результат обработки - какие-то рест реквесты на тему той 100500й задачи. может будет переделан description, добавятся комментарии, может та задача будет переназначена на другого менеджера.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895195
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
да полно там логики

Тогда:
- инжекция
- контекст
- кеш первый хибера
- SOA - грамотно разбить на куски.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895201
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
тут я могу обнаружить что в моем "хранилище" другой рассклад по позициям,
это не rest.
Поэтому вся трабла.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895205
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
BaseRequest
это слово только в контроллере. В слое БЛ его не должно быть.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895330
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
hck1,

Ты плавно двигаешься от rest к SOAP.

Это не страшно. Иногда жизнь диктует протоколы.


Может не надо SOAP?!
Тогда уж GraphQL какой-нибудь, чем SOAP. :-)
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895353
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
GraphQL
это ход конём или прыжок в сторону))
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895355
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mad_nazgul
GraphQL
это ход конём или прыжок в сторону))


Ну помимо GraphQL, есть Thrift, Avro. HateOS.
Как говориться выбирай на вкус.
ИМХО SOAP в самом последнем случае, когда совсем выбора нет.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895358
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
SOAP просто все знают что это такое. Увы.
А "по мере обработки...обогащается" действительно смешно). Хотя и доходчиво.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895404
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
по rest запросу - выкачиваю изменения,
записываю в что-то типа хранилища с историей сущностей,
плюс куски бизнес логики которая дозаполняет какие-то сущности в crm,
создает в crm задачи, стартует бизнес процессы в crm


Все это напоминает дата-интеграцию / синхронизацию данных в ДВХ. Для чего есть уже написанные системы типа Dataflow/ETL.
Из дата интеграции выбивается "создает в crm задачи, стартует бизнес процессы в crm"
первое впечатление, что намешаны кони и люди.


hck1
по rest получает сообщения об изменениях в некой crm системе ...
стартует бизнес процессы в crm


Т.е. crm через rest стартует процес в самом себе... - не излишество?

ИХМО, надо делить: отдельно синхронизация в хранилище и отдельно бизнес логика crm...
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895544
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.

Все это напоминает дата-интеграцию / синхронизацию данных в ДВХ. Для чего есть уже написанные системы типа Dataflow/ETL.
Из дата интеграции выбивается "создает в crm задачи, стартует бизнес процессы в crm"
первое впечатление, что намешаны кони и люди.

да, слегка намешано, но вроде в близкой мне бигдате вполне распространенный подход. в какую-нить кафку летят сообщения, что-то агрегируется и записывается, что-то просто прогоняется через скоринг и назад в кафку. я такое встречал.


Dmitry.

ИХМО, надо делить: отдельно синхронизация в хранилище и отдельно бизнес логика crm...

если разделить то на crm в двое больше нагрузка будет - детали заказа и задачи будет вынуждено и хранилище запрашивать и бизнес логика. ведь crm не шлет детали, а лишь ID сущности, где были некие изменения. во вторых вероятно начнутся логические сложности. допустим заказ в течении пары секунд сменил две стадии - собран и согласован, хранилище получило 2 рест вызова и застала заказ в обоих состояниях, а бизнес логика запросто может получить оповещение с опозданием и застать лишь стадию "согласованно"
я пока совсем не уверен, что разделять была бы хорошей идеей.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895568
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
вроде в близкой мне бигдате
бигдата, ETL это не Информационная система. ETL это просто труда для закачки данных.
Вот у вас и труба. Пытаетесь прогнать через все функции методы Context.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895570
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
ведь crm не шлет детали, а лишь ID сущности
разве?
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895575
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
допустим заказ в течении пары секунд сменил две стадии - собран и согласован, хранилище получило 2 рест вызова и застала заказ в обоих состояниях, а бизнес логика запросто может получить оповещение с опозданием и застать лишь стадию "согласованно"
откройте для себя разность бизнес транзакции и физической транзакции.
И заведите новую тему по данному вопросу. Она обширная.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39895577
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
я пока совсем не уверен, что разделять была бы хорошей идеей.
вас тут никто не поддержал. Вывод?
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896214
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
hck1
допустим заказ в течении пары секунд сменил две стадии - собран и согласован, хранилище получило 2 рест вызова и застала заказ в обоих состояниях, а бизнес логика запросто может получить оповещение с опозданием и застать лишь стадию "согласованно"
откройте для себя разность бизнес транзакции и физической транзакции.
И заведите новую тему по данному вопросу. Она обширная.

накой ? врятли кроме вас тут кто-либо мог заподозрить, что где-то говорилось транзакция субд. я даже в кавычки каждое свое упоминание брал.

PetroNotC Sharp
hck1
я пока совсем не уверен, что разделять была бы хорошей идеей.
вас тут никто не поддержал. Вывод?

без аргументации это лишь пустые рассуждения. пока я не вижу аргументов за долбеж crm двойным набором реквестов на каждое сообщение из crm.
наверно можно порассуждать о каком-то прокси сервисе, который будет пробрасывать события и кешировать ответные реквесты в crm, но зачастую задача в том что бы обработать определенное состояние заказа. т.е. все сущности должны быть согласованны на единый момент времени, что с кеширующей прослойкой становится нетривиальной задачей.
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / филосовский вопрос по проектированию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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