Fixing the transaction in the order creation process
Way back in the Avoiding cross-domain transactions section, in Chapter 1, Building a Better Reactive App, I flagged the fact that we had a cross-domain transaction in the creation of a new SalesOrder
entity. The SQL logic within that transaction not only created the order header and line items, but it also used the book table directly to decrement the inventory associated with that order. I also stated that this is not a real scalable solution, both from a performance standpoint and the fact that it's creating a strong tie (at the db level nonetheless) between these two contexts that will be difficult to deal with moving forward. It's not the time to start the process of getting rid of that transaction relationship and making it more flexible moving forward.
As part of the refactoring work in the incomplete code folder, I also finished the changes to the sales order processing context. The FSM code that used to be in SalesOrderProcessor...