Забудьте на мгновение SOA.
У вас есть две независимые системы и, по крайней мере, одна общая операция, которая требует постоянных обновлений для обеих систем.
Вам необходимо рассмотреть не только проверку инвентаря, но и его уменьшение, и, по-видимому, это правильно, только если добавление строки заказа работает.
Как вы собираетесь обеспечить такую последовательность? Мы можем разработать всевозможные подходы (транзакции 2PC, или резервирование записей, или компенсационные транзакции, или оптимистическую работу с пакетными сверками), но, на мой взгляд, SOA или нет, веб-сервисы или нет, нам все еще нужно решать эти проблемы.
Очевидно, что для повышения эффективности мы хотим сократить количество соединений между частями системы, необходимых для выполнения функции reuisite. Отсюда и шаблон «проверяй и делай», как было предложено. Однако такие шаблоны, по крайней мере, в необработанном виде, как правило, не справляются с путями отказа.
Лучше всего придумать несколько коротких замыканий. Например, мы на самом деле не проверяем запас при добавлении строки заказа. (Вероятно, пользовательский интерфейс уже отображал инвентарь, поэтому сравнительно недавняя проверка уже была сделана) Поэтому вместо этого мы проверяем инвентарь, когда заказ наконец-то размещен, и затем сообщаем пользователю, что «не смог сделать это» или «вам может потребоваться подождать». неделю или две для некоторых битов, вы хотите продолжить ".
С помощью хитрости мы можем выполнять множество операций, обновляя только одну серверную систему для любого вызова службы.