Size: a a a

Software Design/Architecture/Zen

2021 June 02

AV

Alexey Vetrov in Software Design/Architecture/Zen
Здравствуйте. Подскажите как можно поступить. Сейчас есть полностью работающий магазин. Разбил его на контексты (насколько мог). Итого у меня получились 3 контекста: маркетинг (вся информация о товарах: их цены), сам магазин и склад.  Маркетинг - это сторонняя crm'ка для которой я просто сделал обертку в виде acl , т.е. она мне дает данные по ip - дальше сам разбирайся что и как там, не суть.
В контекст магазина я унес только productId, потому что мне все равно что там за название и картиночки - главное он есть и доступен на складе. Все прекрасно было до того момента, пока я не узнал, что товары в процессе эксплуатации могут не только добавляться, но еще и удаляться (soft-delete, т.е. они "скрыты", если так можно сказать).
В итоге теперь кейс такой: у меня есть полностью готовая корзина к заказу, мне надо все продукты перенести в заказ, попутно узнав количество на складе.
Правильно ли я делаю сейчас: у меня есть класс корзины и внутри фабричный метод для заказа.
Что-то вроде toOrder(address, warehouse service). Внутрь этого метода (не в конструктор) я передаю интерфейс склада через который можно узнать текущее количество заказа. Теперь у меня появляется еще один аргумент в методе - catalogService - через который я должен узнать, а не удалился ли товар вообще за время, пока корзина простаивалась, итого получается:
function toOrder(address, customer, warehouseService, catalogService)

у меня собственно 2 вопроса по этому поводу:
1) Лучше ли унести ли это все в доменные сервисы, ибо мне не нравится вообще, что корзина в методе получает какие-то адреса и прочие поля, необходимые для заказа
2) Правильно ли пользоваться warehouseService, catalogService такими сервисами внутри контекста магазина
источник

S

Shieldy in Software Design/Architecture/Zen
Preston Mosley, please, press the button below within the time amount specified, otherwise you will be kicked. Thank you! (60 sec)
Powered by Todorant
источник

SP

Sergey Protko in Software Design/Architecture/Zen
У бизнеса спроси. Что мол делать если товар удалили за секунду до оформления заказа. А за минуту пока он адрес заполнял? А за те пол часа что он ходил?
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Пока вводил данные кредитки, чтоб оплатить, товар удалили. Блокер 😂 а нефиг удалять товары в часы пик на сайте))
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Если товар удалили - он должен пометиться в корзине, как недоступный, что-ли. Но это уже задача вьюшки все отрисовать.
За создание самих заказов отвечает апишка, поэтому если я попытаюсь создать заказ - апишка вернёт ошибку. Вот только эти ошибки нечитабельны + ко всему, хотелось бы на своей стороне об этом знать заранее.

В данном конкретно случае корректно ли делать так, как я привел в примере?
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Ну т.е. такие сервисы, которые лезут в другой контекст из текущего
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Да, вот такая ситуация и создалась, когда никто вообще об этом на сказал. Я сделал на коленке решение. Теперь хочу сделать правильно, что-ли.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Для всех корзин показывать товар как удаленный, для апи заказа процессить (ещё какое-то время, заранее оговоренное с бизнесом этот таймаут)
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Если бы, апи у них связан с 1с и ещё чем-то там. Более того находится на разработке вообще фиг пойми где.
Там его удаляют не с сайта, а сразу из 1с
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Даже при желании тайм-аут невозможен
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Лол. 1С 😂
Сочувствую
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Ну интеграцию делал не я - мне уже повезло, думаю
источник

ST

Serguei Tarassov in Software Design/Architecture/Zen
1С тут ни при чем. Локально т.е. в твоей подсистеме товар удалить нельзя - он уже вставлен в заказ, т.е. срабатывает целостность, FK или событие. Далее заказ передается на обработку, и там уже решают, как с этим разбираться.
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Я так и попытался объяснить, но им дороже переплачивать чувакам с апишки заказов, нежели процессить это на моей стороне
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Учитывая, что свою работу я уже выполнил по тз
источник

ST

Serguei Tarassov in Software Design/Architecture/Zen
тогда проблема неясна: хотят целостности, в апи каталога тов.позиций должен быть способ блокировки. По сути, это ничем не отличается от резервирования.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Выполнил? Получил оплату? - вали оттуда (шутка). Объясни им, что с (конфигуруемым) таймаутом эта ситуация будет редко встречаться (если корзина не будет такое на чекаут пускать). Получил ивент на удаление продукта - после N времени законно реджектишь такие заказы
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Пока только предоплату
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Опять же. Это надо кого-то просить, платить куда-то деньги. Мне доплачивать
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Чувствую, завтра будет ещё один интересный разговор
источник