powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / филосовский вопрос по проектированию
46 сообщений из 46, показаны все 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
филосовский вопрос по проектированию
    #39896238
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
накой ? врятли кроме вас тут кто-либо мог заподозрить, что где-то говорилось транзакция субд.
а какая?
Я вам сказал как делают ту проблему что вы описали.
КТО ВАМ СКАЗАЛ ЧТО С КЛИЕНТА ПРИХОДИТ ТОЛЬКО ID?
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896241
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор топика. Вы неправильно сделали REST.
И это можно доказать, если вы будете разговаривать а не молчать.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896448
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор хрень какую-то описывает

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

В любом случае, REST должен возврашать всю иерархию в консистентном состоянии
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896479
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Автор хрень какую-то описывает

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

В любом случае, REST должен возврашать всю иерархию в консистентном состоянии

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

вообще, автор описывает битрикс24
https://dev.1c-bitrix.ru/rest_help/crm/cdeals/events_deal/on_Crm_Deal_Update.php

а что, какой-нить зибель или sap запихает в респонс все связанные сущности со всеми полями ? что-то я сомневаюсь
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896485
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
В любом случае, REST должен возврашать всю иерархию в консистентном состоянии

там есть понятие батч. типа несколько сущностей можно запросить одним запросом ради оптимизации, но консистентность оно не обещает, да.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896492
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1,
Ты нас терминами не пугай
Crm, sap, bitrix
Менеджер что ли?
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896494
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
пихать все это в каждый
не надо В КАЖДЫЙ.
Гигантомания прям.
Возьми один вопрос по рест и изучи его.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896498
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения
слово crm можно исключить из топика. Оно путает автора.
Как будто это слово изменило архитектуру ИС в java проектах.
Нисколько.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896512
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Х.з. как там SAP запихивает

Каким образом Вы собираетесь что-то осмысленное делать с данными, когда придет

1. Заголовок счета-фактуры. Итого по счету -100 рублей, в том числе НДС -20 рублей
2. А запросами по строкам счета-фактуры:
Услуга N1 (корректировка за пред.период) -100 рублей В том числе НДС -20 рублей
Услуга N2 150 рублей В том числе НДС 30 рублей

Что Вы будете с такими "данными" делать?

Особенно хорошо их будет интегрировать с бухгалтерий. Когда отрицательные счета это совсем и не счита, а авансы. Бухгалтерия обычно доходчиво такие косяки объясняет, без лишних стенснений и без попыток "удержать великий и могучий русский язык за зубами"
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896516
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдвину теорию:

Если информация не консистентна, то это называется не "данные", а "мусор"

В этом случае, значительно эффективнее заранее выполнить оптимизацию программы и просто все REST запросы заменить на вызов локальной ф-ции Random.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896520
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Если информация не консистентна, то это называется не "данные", а "мусор"

+1
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896535
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
hck1
делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения
слово crm можно исключить из топика. Оно путает автора.
Как будто это слово изменило архитектуру ИС в java проектах.
Нисколько.

не надо исключать. кроме тебя тут есть все же есть люди из IT и понимают чем задачи crm отличаются от бухгалтерии.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896539
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1


Ситуация описываемая автором топика, называется просто - бардак.

"компьютеризация бардака на выходе даст лишь компьютеризированный бардак" ( C )

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

НО не нужно забывать:

Второй закон термодинамики Эверитта: Неразбериха в обществе постоянно возрастает. Только очень упорным трудом можно её несколько уменьшить. Однако сама эта попытка приведет к росту совокупной неразберихи .
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896549
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO & AFAIK

hck1
Leonid Kudryavtsev
В любом случае, REST должен возврашать всю иерархию в консистентном состоянии

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

I)
Обычно, все же, из системы в систему данные пытаются передавать, когда они в каком-то "мало редактируемом" состоянии.

Например у заказы в OeBS (Sales Order, Purchase Order), есть понятие "Утверждение заказа". После утверждения, заказ уже (теоретически) меняться не должен

Например, если по в событие "смена статуса" приходит с какого и на какой он меняется, то теоретически, при:
1) "неутвержден -> утвержден" данные можно смело копировать в хранилище т.к. Order Line в OeBS уже меняться не должны.
2) При событие "утвержден -> не утвержден", смело все удалять ))). Т.к. неутвержденный заказ в понятиях OeBS это просто мусор.

note. вроде статус есть даже на отдельных строках заказа, лет 10 назад с OeBS работал, не помню

II)
Если говорить "про хранилище" / BI, то например у нас его заливают ночью, когда с системой никто не работает.

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

Сравнивать данные в текущем периоде, никому и в голову не приходит. И так понятно, что они не совпадают и это нормально.

III)
аналогично в OeBS происходит заливка данных в ERP

запихиваем данные в интерфейсную таблицу
выполняем команду "запустить"
запускается батч процесс, который эти данные в ERP и проводит

т.е., теоеретически, для процесса "запихивания" консистентность всех данных не требуется, но процесс "разнести" должен быть атомарный и работать с консистентыми данными.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896559
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Ему не понравился ваш пример про бухгалтеров).
Он посчитал что консистентность у них одна, у учеток другая и у у crm третья особенная.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896563
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Х.з. как там SAP запихивает

Каким образом Вы собираетесь что-то осмысленное делать с данными, когда придет

1. Заголовок счета-фактуры. Итого по счету -100 рублей, в том числе НДС -20 рублей
2. А запросами по строкам счета-фактуры:
Услуга N1 (корректировка за пред.период) -100 рублей В том числе НДС -20 рублей
Услуга N2 150 рублей В том числе НДС 30 рублей

Что Вы будете с такими "данными" делать?

Особенно хорошо их будет интегрировать с бухгалтерий. Когда отрицательные счета это совсем и не счита, а авансы. Бухгалтерия обычно доходчиво такие косяки объясняет, без лишних стенснений и без попыток "удержать великий и могучий русский язык за зубами"

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

Leonid Kudryavtsev

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

НО не нужно забывать:

Второй закон термодинамики Эверитта: Неразбериха в обществе постоянно возрастает. Только очень упорным трудом можно её несколько уменьшить. Однако сама эта попытка приведет к росту совокупной неразберихи .


я предлагаю подходы битрикс тут не обсуждать, они сделали вот так и выдают вот такой интерфейс. я на это подписался прекрасно осознавая что меня ждет и задача вытянуть с этого максимум, в том числе что бы заработать на взрослое решение. задачи бухгалтерии с точностью до цента мне решать не нужно, мне нужно будет решать задачки аналитики - найти теряющий спрос товар, где застревает обработка заказа, раздать задачи сотрудникам, если где-то наблюдаются задержки. там суперточность не нужна, если пару заказов пропустят какие-то изменения в истории - плохо, но не трагедия. BI отчетики тоже, они не бухгалтерские - нужны что бы видеть тенденции и для поиска, где зависают ресурсы. детали уже человек перепроверит, если нужно будет в том числе и по бухгалтерским отчетам.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896575
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1

если пару заказов пропустят какие-то изменения в истории - плохо, но не трагедия


Бизнес конкретика нужна. Так можно до бесконечности обсуждать.

Привел пример OeBS. На SO (Sales Order) может быть 100500 изменений - но на их, вообще-то, всем глубоко пчихать. Единственное ВАЖНОЕ изменение (с точки зрения системы) - утверждение заказа.

Но после "утверждения заказа" он обычно (могут быть исключения подтверждающие правило) уже НЕ меняется

Т.е. его смело можно вычитывать и отправлять в бухгалтерию. Но вычитывать лучше атомарным и консистентным способом. Например смотрю на Ваш же битрекс и вижу, что товарные позиции определяются так же ОДНИМ запросом (crm.deal.productrows.get)

Т.е., например, как бы я видел более-менее корректную интеграцию с бухгалтерией:
1. изменения сами по себе - глубоко пофиг
2. прошла операция "утверждение заказа" (изменился статус) или аналог - данные передаются
например в бухгалтерии создаем счет
3. прошла операция "отмена утверждения заказа" - данные из бухгалтерии "вычишаются"
например в бухгалтерии для старого счета создаем сторнировочный счет (УЖЕ на основе данных бухгалтерии)

Не знаю Битрекс, но глубоко убежден, что понятия аналогичные "утверждение заказа" у них есть.

Возьмем тот же Ozon. Сколько раз я редактирую свою корзину заказов - в целом глубо пофиг. Важно только, когда я эту корзину превращаю в утвержденный мною заказ - его можно отправлять на склад "скомплектовать заказ, собрать все в посылку". Если же я от заказа отказываюсь, то опять таки, на склад нужно отправлять команду "заказчик сцуко, заставил делать лишнию работу, разкомплектовать посылку обратно и разложить обратно на полки" при этом, знать, что было в заказе уже не нужно. Это информация уже есть на складе.
Но, опять таки, в оформленном заказе, изменять на Ozon'е я уже ничего не могу .

IMHO & AFAIK

Но частая ситуации, что во время операции ОБРАБОТКИ данные уже успели поменяться, это нонсенс

Если есть поле Version, то наверное по полю Version, можно определять, что данные в процессе переноса изменились и просто делать rollback.

Ну и согласен с PetroNotC Sharp какая-то мешанина из ETL и обработки. Может проще задачи разделить? ETL - отдельно; обработка - отдельно, по уже извлеченным данным.
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896577
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Бизнес конкретика нужна. Так можно до бесконечности обсуждать
да.
У вас монолог а не диалог. Так как автор не умеет разговаривать. Не может привести конкректный юз кейс с вопросом.
Заикнулся один раз с тем что приходит только ID и всё).
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896580
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Вот это вы поняли о чём он?
hck1
так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm)

Ниже он оговорился что этот номер чтобы не запутатся.
И он третью страницу молчит как рыба))
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896596
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щит
...
Рейтинг: 0 / 0
филосовский вопрос по проектированию
    #39896881
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
hck1
делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения, записываю в что-то типа хранилища с историей сущностей, плюс куски бизнес логики которая дозаполняет какие-то сущности в crm, создает в crm задачи, стартует бизнес процессы в crm. так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm), почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана. потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект, который по мере обработки рест вызова "обогащается", вместо того что бы передавать лишь необходимый минимум ? как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход.
есть какие-то бест практики на эту тему?


Проектирование API это всегда вещь деликатная и зависящая от многих факторов. Тут надо учитывать множество факторов, вы правильно указали на некоторые из них
1) Чем больше параметров на входе - тем сложнее понять что функция делает, тем сложнее ее отрефакторить ну и в целом разобраться что тут вообще происходит
2) Если у вас происходит дублирование кода и практически всегда некоторые поля передаются - значит надо сделать какой-то тип BaseRequest и включить их туда, но тут главное не переборщить - включать поле надо если оно приходит в 80% и выше. Возможно стоит сделать два абстрактных реквеста - один включает только транзакшен, второй и транзакшен и ордер айди. Ну и т.д. Каких-то бест практисес особо не существует, кроме задействования мозга по назначению

параметры на входе которых много.. ну можно по параметру на метод. )) мартин говорит это хорошо. а фронты взвоют. они всегда воют когда их просишь сделать больше одного запроса ))
так что тут еще зависит от тех сервисов что работают с его приложением.

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


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