|
филосовский вопрос по проектированию
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=59&msg=39895404&tid=2121006]: |
0ms |
get settings: |
27ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
486ms |
get tp. blocked users: |
2ms |
others: | 352ms |
total: | 1052ms |
0 / 0 |