|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения, записываю в что-то типа хранилища с историей сущностей, плюс куски бизнес логики которая дозаполняет какие-то сущности в crm, создает в crm задачи, стартует бизнес процессы в crm. так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm), почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана. потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект, который по мере обработки рест вызова "обогащается", вместо того что бы передавать лишь необходимый минимум ? как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход. есть какие-то бест практики на эту тему? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 16:11 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения, записываю в что-то типа хранилища с историей сущностей, плюс куски бизнес логики которая дозаполняет какие-то сущности в crm, создает в crm задачи, стартует бизнес процессы в crm. так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm), почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана. потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект, который по мере обработки рест вызова "обогащается", вместо того что бы передавать лишь необходимый минимум ? как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход. есть какие-то бест практики на эту тему? Проектирование API это всегда вещь деликатная и зависящая от многих факторов. Тут надо учитывать множество факторов, вы правильно указали на некоторые из них 1) Чем больше параметров на входе - тем сложнее понять что функция делает, тем сложнее ее отрефакторить ну и в целом разобраться что тут вообще происходит 2) Если у вас происходит дублирование кода и практически всегда некоторые поля передаются - значит надо сделать какой-то тип BaseRequest и включить их туда, но тут главное не переборщить - включать поле надо если оно приходит в 80% и выше. Возможно стоит сделать два абстрактных реквеста - один включает только транзакшен, второй и транзакшен и ордер айди. Ну и т.д. Каких-то бест практисес особо не существует, кроме задействования мозга по назначению ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 16:32 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm) hck1 почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана Зачем? Наверно не номер, а ID заказа. А по этому ID можно поднять все что нужно и не передавать цепочкой по стеку методов. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 16:57 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
забыл ник Возможно стоит сделать два абстрактных реквеста - один включает только транзакшен, второй и транзакшен и ордер айди. Ну и т.д. Каких-то бест практисес особо не существует, кроме задействования мозга по назначению вот тут и вопрос класть ордер айди или целиком ордер. кому нужен лишь айди - смогут взять из ордера. просто код развивается совсем по аджайл - вроде надо было лишь шлепнуть задачу, но уже через пару дней стало ясно что в задачу надо ставить ответственного из заказа. и теперь через все вызовы приходится заказ протаскивать, т.к. вот теперь становится ясно что там много чего видимо еще понадобится и теперь понятно что не только из заказа. потому и захотелось - раз уж буду протягивать заказ, так может что-то сразу крупнее заказа закладывать. PetroNotC Sharp hck1 почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm) понял что любое сообщение от логера надо сопровождать "номером транзакции", что бы потом иметь возможность понять как такое вышло. crm может подтормаживать и сыпать свои сообщения не в том порядке в каком реально они произошли. а поскольку лог выводит почти везде хоть что-то ... PetroNotC Sharp Зачем? Наверно не номер, а ID заказа. А по этому ID можно поднять все что нужно и не передавать цепочкой по стеку методов. в "хранилище" пока не вся инфа хранится, выходит что по ID далеко не всегда можно поднять. а лишние рест реквесты совсем не хотелось бы плодить, да и ситуация в crm уже может изменится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 17:30 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 логера Начал искать слово логер. Причем тут логирование вообще? Ты в курсе что у логировщиков это уже заложено. В одном месте положил число и никуда протаскивать не надо. Ты прогу для уборщицы логировщика пишешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 17:36 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
1) hck1 как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход. есть какие-то бест практики на эту тему? Чтоб было ясно что требуется на вход на вход нужно принимать интерфейс , а уж имплементить его созданой конкретно под этот запрос DTO-шкой или монстриком имплементящим ещё дюжину других интерфейсов уже личное дело каждого. 2)идеологический вопрос я так понимаю тут передавать ли внутрь айдишник и потом изнутри добывать инфу связаную с айдишником или передавать эту инфу явно. Имхо зависит от того насколько вы доверяете внутренностям методов и являются ли поля ридонли - а то бывают заморочки что один метод поменял поля но не сохранил их в базу, а сам ордер поменял кто-то ещё паралельно ручками в другом контексте, а кто-то взял из базы старое значение... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 13:07 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Марс 2)идеологический вопрос я так понимаю тут передавать ли внутрь айдишник и потом изнутри добывать инфу связаную с айдишником или передавать эту инфу явно. Так как инфа нужна ДЛЯ ЛОГИРОВАНИЯ а не БЛ. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 13:19 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект Нормальная функциональщина. Ничего такого. Некоторые пишут так и даже живут вполне полноценно. Но java тебе тут не помошник. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 13:23 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 какой-то обобщенный объект, который по мере обработки рест вызова "обогащается" честно говоря, у меня в голове плохо укладывается REST (stateless) и "по мере обработки...обогащается" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 14:00 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1, Ты плавно двигаешься от rest к SOAP. Это не страшно. Иногда жизнь диктует протоколы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 15:35 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Марс 2)идеологический вопрос я так понимаю тут передавать ли внутрь айдишник и потом изнутри добывать инфу связаную с айдишником или передавать эту инфу явно. Так как инфа нужна ДЛЯ ЛОГИРОВАНИЯ а не БЛ. да полно там логики, успокойся. а про MDC, ok. не знал. спасибо за наводку. всем. сценарии обработки примерно такие - прилетает от crm рест вызов о том, что задача ид 100500 изменилась. далее я идет обработка этой "транзакции". я дергаю рест и получаю детали по задачи, если она связана с заказом, запрашиваю детали заказа, товары привязанные к заказу. тут я могу обнаружить что в моем "хранилище" другой рассклад по позициям, я фиксирую что пришло, что ушло из заказа в "хранилище". т.е. вроде как и вызов был на тему задачи, но у меня уже собраны детальные данные и по заказу и по товарам заказа. и очень вероятно когда я все таки добирусь до обработки самой задачи, то много чего из заказа понадобится, почти наверняка упаковщик заказа. вобщем наверно действительно нужен тот BaseRequest и туда по мере "открытий" складывать имутабл сущности, с которыми эта "транзакция" сталкивалась по мере обработки. т.е. если понадобились товары из заказа, складывать их BaseRequest и подсовывать весь BaseRequest дальнейшем объектам бизнес логики, например обработчикам задач да. а результат обработки - какие-то рест реквесты на тему той 100500й задачи. может будет переделан description, добавятся комментарии, может та задача будет переназначена на другого менеджера. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 17:35 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 да полно там логики Тогда: - инжекция - контекст - кеш первый хибера - SOA - грамотно разбить на куски. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 17:58 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 тут я могу обнаружить что в моем "хранилище" другой рассклад по позициям, Поэтому вся трабла. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 18:07 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 BaseRequest ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 18:11 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
mayton hck1, Ты плавно двигаешься от rest к SOAP. Это не страшно. Иногда жизнь диктует протоколы. Может не надо SOAP?! Тогда уж GraphQL какой-нибудь, чем SOAP. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 05:53 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
mad_nazgul GraphQL ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 08:29 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mad_nazgul GraphQL Ну помимо GraphQL, есть Thrift, Avro. HateOS. Как говориться выбирай на вкус. ИМХО SOAP в самом последнем случае, когда совсем выбора нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 08:37 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
mad_nazgul, SOAP просто все знают что это такое. Увы. А "по мере обработки...обогащается" действительно смешно). Хотя и доходчиво. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 08:42 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 по rest запросу - выкачиваю изменения, записываю в что-то типа хранилища с историей сущностей, плюс куски бизнес логики которая дозаполняет какие-то сущности в crm, создает в crm задачи, стартует бизнес процессы в crm Все это напоминает дата-интеграцию / синхронизацию данных в ДВХ. Для чего есть уже написанные системы типа Dataflow/ETL. Из дата интеграции выбивается "создает в crm задачи, стартует бизнес процессы в crm" первое впечатление, что намешаны кони и люди. hck1 по rest получает сообщения об изменениях в некой crm системе ... стартует бизнес процессы в crm Т.е. crm через rest стартует процес в самом себе... - не излишество? ИХМО, надо делить: отдельно синхронизация в хранилище и отдельно бизнес логика crm... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 10:15 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Dmitry. Все это напоминает дата-интеграцию / синхронизацию данных в ДВХ. Для чего есть уже написанные системы типа Dataflow/ETL. Из дата интеграции выбивается "создает в crm задачи, стартует бизнес процессы в crm" первое впечатление, что намешаны кони и люди. да, слегка намешано, но вроде в близкой мне бигдате вполне распространенный подход. в какую-нить кафку летят сообщения, что-то агрегируется и записывается, что-то просто прогоняется через скоринг и назад в кафку. я такое встречал. Dmitry. ИХМО, надо делить: отдельно синхронизация в хранилище и отдельно бизнес логика crm... если разделить то на crm в двое больше нагрузка будет - детали заказа и задачи будет вынуждено и хранилище запрашивать и бизнес логика. ведь crm не шлет детали, а лишь ID сущности, где были некие изменения. во вторых вероятно начнутся логические сложности. допустим заказ в течении пары секунд сменил две стадии - собран и согласован, хранилище получило 2 рест вызова и застала заказ в обоих состояниях, а бизнес логика запросто может получить оповещение с опозданием и застать лишь стадию "согласованно" я пока совсем не уверен, что разделять была бы хорошей идеей. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:12 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 вроде в близкой мне бигдате Вот у вас и труба. Пытаетесь прогнать через все функции методы Context. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:30 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 ведь crm не шлет детали, а лишь ID сущности ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:31 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 допустим заказ в течении пары секунд сменил две стадии - собран и согласован, хранилище получило 2 рест вызова и застала заказ в обоих состояниях, а бизнес логика запросто может получить оповещение с опозданием и застать лишь стадию "согласованно" И заведите новую тему по данному вопросу. Она обширная. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:33 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 я пока совсем не уверен, что разделять была бы хорошей идеей. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:34 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
PetroNotC Sharp hck1 допустим заказ в течении пары секунд сменил две стадии - собран и согласован, хранилище получило 2 рест вызова и застала заказ в обоих состояниях, а бизнес логика запросто может получить оповещение с опозданием и застать лишь стадию "согласованно" И заведите новую тему по данному вопросу. Она обширная. накой ? врятли кроме вас тут кто-либо мог заподозрить, что где-то говорилось транзакция субд. я даже в кавычки каждое свое упоминание брал. PetroNotC Sharp hck1 я пока совсем не уверен, что разделять была бы хорошей идеей. без аргументации это лишь пустые рассуждения. пока я не вижу аргументов за долбеж crm двойным набором реквестов на каждое сообщение из crm. наверно можно порассуждать о каком-то прокси сервисе, который будет пробрасывать события и кешировать ответные реквесты в crm, но зачастую задача в том что бы обработать определенное состояние заказа. т.е. все сущности должны быть согласованны на единый момент времени, что с кеширующей прослойкой становится нетривиальной задачей. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 11:36 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 накой ? врятли кроме вас тут кто-либо мог заподозрить, что где-то говорилось транзакция субд. Я вам сказал как делают ту проблему что вы описали. КТО ВАМ СКАЗАЛ ЧТО С КЛИЕНТА ПРИХОДИТ ТОЛЬКО ID? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 11:58 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Автор топика. Вы неправильно сделали REST. И это можно доказать, если вы будете разговаривать а не молчать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 12:00 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Автор хрень какую-то описывает Если данные не консистенты в процессе обработке, я вообще не понимаю, как на таких данных можно какую-то реальную задачу делать. В любом случае, REST должен возврашать всю иерархию в консистентном состоянии ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:11 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Автор хрень какую-то описывает Если данные не консистенты в процессе обработке, я вообще не понимаю, как на таких данных можно какую-то реальную задачу делать. В любом случае, REST должен возврашать всю иерархию в консистентном состоянии с чего бы ? в crm уже десятки сущностей и сотни полей в них, включая бинарные файлы документов в стиле счетов и коммерческих предложений, документов доставки. пихать все это в каждый респонс тиражного продукта глупо. вообще, автор описывает битрикс24 https://dev.1c-bitrix.ru/rest_help/crm/cdeals/events_deal/on_Crm_Deal_Update.php а что, какой-нить зибель или sap запихает в респонс все связанные сущности со всеми полями ? что-то я сомневаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:39 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev В любом случае, REST должен возврашать всю иерархию в консистентном состоянии там есть понятие батч. типа несколько сущностей можно запросить одним запросом ради оптимизации, но консистентность оно не обещает, да. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:46 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1, Ты нас терминами не пугай Crm, sap, bitrix Менеджер что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:50 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 пихать все это в каждый Гигантомания прям. Возьми один вопрос по рест и изучи его. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:51 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения Как будто это слово изменило архитектуру ИС в java проектах. Нисколько. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:58 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Х.з. как там SAP запихивает Каким образом Вы собираетесь что-то осмысленное делать с данными, когда придет 1. Заголовок счета-фактуры. Итого по счету -100 рублей, в том числе НДС -20 рублей 2. А запросами по строкам счета-фактуры: Услуга N1 (корректировка за пред.период) -100 рублей В том числе НДС -20 рублей Услуга N2 150 рублей В том числе НДС 30 рублей Что Вы будете с такими "данными" делать? Особенно хорошо их будет интегрировать с бухгалтерий. Когда отрицательные счета это совсем и не счита, а авансы. Бухгалтерия обычно доходчиво такие косяки объясняет, без лишних стенснений и без попыток "удержать великий и могучий русский язык за зубами" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 16:21 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Выдвину теорию: Если информация не консистентна, то это называется не "данные", а "мусор" В этом случае, значительно эффективнее заранее выполнить оптимизацию программы и просто все REST запросы заменить на вызов локальной ф-ции Random. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 16:30 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Если информация не консистентна, то это называется не "данные", а "мусор" +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 16:36 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
PetroNotC Sharp hck1 делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения Как будто это слово изменило архитектуру ИС в java проектах. Нисколько. не надо исключать. кроме тебя тут есть все же есть люди из IT и понимают чем задачи crm отличаются от бухгалтерии. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 16:59 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 Ситуация описываемая автором топика, называется просто - бардак. "компьютеризация бардака на выходе даст лишь компьютеризированный бардак" ( C ) p.s. вообще-то, как автор описывает свою задачу 22026892 он ровно и пытается из существующего бардака и мусора возврашаемых по REST хоть как-то в свое хранилище переложить и упорядочить. НО не нужно забывать: Второй закон термодинамики Эверитта: Неразбериха в обществе постоянно возрастает. Только очень упорным трудом можно её несколько уменьшить. Однако сама эта попытка приведет к росту совокупной неразберихи . ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 17:18 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
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 и проводит т.е., теоеретически, для процесса "запихивания" консистентность всех данных не требуется, но процесс "разнести" должен быть атомарный и работать с консистентыми данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 17:41 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Ему не понравился ваш пример про бухгалтеров). Он посчитал что консистентность у них одна, у учеток другая и у у crm третья особенная. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:03 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Х.з. как там SAP запихивает Каким образом Вы собираетесь что-то осмысленное делать с данными, когда придет 1. Заголовок счета-фактуры. Итого по счету -100 рублей, в том числе НДС -20 рублей 2. А запросами по строкам счета-фактуры: Услуга N1 (корректировка за пред.период) -100 рублей В том числе НДС -20 рублей Услуга N2 150 рублей В том числе НДС 30 рублей Что Вы будете с такими "данными" делать? Особенно хорошо их будет интегрировать с бухгалтерий. Когда отрицательные счета это совсем и не счита, а авансы. Бухгалтерия обычно доходчиво такие косяки объясняет, без лишних стенснений и без попыток "удержать великий и могучий русский язык за зубами" в бухгалтерию уходит согласованный и готовый к отгрузке заказ, там своя интеграция с 1с. глядя как там все устроено, не думаю что там как-то блокируется заказ прежде чем выгружается в 1с. решение простое - на кнопочку запуска процесса должен нажимать единственный в канторе бух. нажмет кто-то другой - директор поругает. Leonid Kudryavtsev p.s. вообще-то, как автор описывает свою задачу 22026892 он ровно и пытается из существующего бардака и мусора возврашаемых по REST хоть как-то в свое хранилище переложить и упорядочить. НО не нужно забывать: Второй закон термодинамики Эверитта: Неразбериха в обществе постоянно возрастает. Только очень упорным трудом можно её несколько уменьшить. Однако сама эта попытка приведет к росту совокупной неразберихи . я предлагаю подходы битрикс тут не обсуждать, они сделали вот так и выдают вот такой интерфейс. я на это подписался прекрасно осознавая что меня ждет и задача вытянуть с этого максимум, в том числе что бы заработать на взрослое решение. задачи бухгалтерии с точностью до цента мне решать не нужно, мне нужно будет решать задачки аналитики - найти теряющий спрос товар, где застревает обработка заказа, раздать задачи сотрудникам, если где-то наблюдаются задержки. там суперточность не нужна, если пару заказов пропустят какие-то изменения в истории - плохо, но не трагедия. BI отчетики тоже, они не бухгалтерские - нужны что бы видеть тенденции и для поиска, где зависают ресурсы. детали уже человек перепроверит, если нужно будет в том числе и по бухгалтерским отчетам. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:17 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
hck1 если пару заказов пропустят какие-то изменения в истории - плохо, но не трагедия Бизнес конкретика нужна. Так можно до бесконечности обсуждать. Привел пример OeBS. На SO (Sales Order) может быть 100500 изменений - но на их, вообще-то, всем глубоко пчихать. Единственное ВАЖНОЕ изменение (с точки зрения системы) - утверждение заказа. Но после "утверждения заказа" он обычно (могут быть исключения подтверждающие правило) уже НЕ меняется Т.е. его смело можно вычитывать и отправлять в бухгалтерию. Но вычитывать лучше атомарным и консистентным способом. Например смотрю на Ваш же битрекс и вижу, что товарные позиции определяются так же ОДНИМ запросом (crm.deal.productrows.get) Т.е., например, как бы я видел более-менее корректную интеграцию с бухгалтерией: 1. изменения сами по себе - глубоко пофиг 2. прошла операция "утверждение заказа" (изменился статус) или аналог - данные передаются например в бухгалтерии создаем счет 3. прошла операция "отмена утверждения заказа" - данные из бухгалтерии "вычишаются" например в бухгалтерии для старого счета создаем сторнировочный счет (УЖЕ на основе данных бухгалтерии) Не знаю Битрекс, но глубоко убежден, что понятия аналогичные "утверждение заказа" у них есть. Возьмем тот же Ozon. Сколько раз я редактирую свою корзину заказов - в целом глубо пофиг. Важно только, когда я эту корзину превращаю в утвержденный мною заказ - его можно отправлять на склад "скомплектовать заказ, собрать все в посылку". Если же я от заказа отказываюсь, то опять таки, на склад нужно отправлять команду "заказчик сцуко, заставил делать лишнию работу, разкомплектовать посылку обратно и разложить обратно на полки" при этом, знать, что было в заказе уже не нужно. Это информация уже есть на складе. Но, опять таки, в оформленном заказе, изменять на Ozon'е я уже ничего не могу . IMHO & AFAIK Но частая ситуации, что во время операции ОБРАБОТКИ данные уже успели поменяться, это нонсенс Если есть поле Version, то наверное по полю Version, можно определять, что данные в процессе переноса изменились и просто делать rollback. Ну и согласен с PetroNotC Sharp какая-то мешанина из ETL и обработки. Может проще задачи разделить? ETL - отдельно; обработка - отдельно, по уже извлеченным данным. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:59 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Бизнес конкретика нужна. Так можно до бесконечности обсуждать У вас монолог а не диалог. Так как автор не умеет разговаривать. Не может привести конкректный юз кейс с вопросом. Заикнулся один раз с тем что приходит только ID и всё). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:09 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Вот это вы поняли о чём он? hck1 так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm) Ниже он оговорился что этот номер чтобы не запутатся. И он третью страницу молчит как рыба)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:17 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
щит ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 20:03 |
|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#18+
забыл ник hck1 делаю приложение, которое по rest получает сообщения об изменениях в некой crm системе. выкачиваю изменения, записываю в что-то типа хранилища с историей сущностей, плюс куски бизнес логики которая дозаполняет какие-то сущности в crm, создает в crm задачи, стартует бизнес процессы в crm. так вот, почти везде в процедуры приходится передавать номер "транзакции" (номер rest вызова от crm), почти везде нужен хотя бы номер заказа, часто и прочие поля заказа, т.к. та же задача обычно как-то на заказ завязана. потому начинаю задумываться на сколько это будет дурной идеей стараться передавать в методы какой-то обобщенный объект, который по мере обработки рест вызова "обогащается", вместо того что бы передавать лишь необходимый минимум ? как я понимаю читабельность может уменьшится, т.к. будет не совсем ясно чего методу требуется на вход. есть какие-то бест практики на эту тему? Проектирование API это всегда вещь деликатная и зависящая от многих факторов. Тут надо учитывать множество факторов, вы правильно указали на некоторые из них 1) Чем больше параметров на входе - тем сложнее понять что функция делает, тем сложнее ее отрефакторить ну и в целом разобраться что тут вообще происходит 2) Если у вас происходит дублирование кода и практически всегда некоторые поля передаются - значит надо сделать какой-то тип BaseRequest и включить их туда, но тут главное не переборщить - включать поле надо если оно приходит в 80% и выше. Возможно стоит сделать два абстрактных реквеста - один включает только транзакшен, второй и транзакшен и ордер айди. Ну и т.д. Каких-то бест практисес особо не существует, кроме задействования мозга по назначению параметры на входе которых много.. ну можно по параметру на метод. )) мартин говорит это хорошо. а фронты взвоют. они всегда воют когда их просишь сделать больше одного запроса )) так что тут еще зависит от тех сервисов что работают с его приложением. если это клиентские приложения, то проще получить всё и отдать всё. за раз. и все довольны. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 02:17 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121006]: |
0ms |
get settings: |
24ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
785ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 1314ms |
0 / 0 |