Appendix C. Swapping Out the Infrastructure: Do Everything with CSVs
This appendix is intended as a little illustration of the benefits of the Repository, Unit of Work, and Service Layer patterns. It’s intended to follow from Chapter 6.
Just as we finish building out our Flask API and getting it ready for release, the business comes to us apologetically, saying they’re not ready to use our API and asking if we could build a thing that reads just batches and orders from a couple of CSVs and outputs a third CSV with allocations.
Ordinarily this is the kind of thing that might have a team cursing and spitting
and making notes for their memoirs. But not us! Oh no, we’ve ensured that
our infrastructure concerns are nicely decoupled from our domain model and
service layer. Switching to CSVs will be a simple matter of writing a couple
of new Repository and UnitOfWork classes, and then we’ll be able to reuse
all of our logic from the domain layer and the service layer.
Here’s an E2E test to show you how the CSVs flow in and out:
A first CSV test (tests/e2e/test_csv.py)
deftest_cli_app_reads_csvs_with_batches_and_orders_and_outputs_allocations(make_csv):sku1,sku2=random_ref('s1'),random_ref('s2')batch1,batch2,batch3=random_ref('b1'),random_ref('b2'),random_ref('b3')order_ref=random_ref('o')make_csv('batches.csv',[['ref','sku','qty','eta'],[batch1,sku1,100,''],[batch2,sku2,100,'2011-01-01'],[batch3,sku2,100,'2011-01-02'],])orders_csv=make_csv('orders.csv' ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access