Annexe C. Remplacer l'infrastructure : Tout faire avec des CSV
Cette annexe se veut une petite illustration des avantages des patrons Référentiel, Unité de travail et Couche de service. Elle fait suite au chapitre 6.
Juste au moment où nous finissons de construire notre API Flask et de la préparer pour la publication, l'entreprise vient nous voir en s'excusant, en disant qu'elle n'est pas prête à utiliser notre API et en demandant si nous pourrions construire un truc qui lit juste les lots et les commandes à partir de quelques CSV et qui sort un troisième CSV avec les allocations.
D'ordinaire, c'est le genre de chose qui pourrait faire jurer et cracher une équipe et lui faire prendre des notes pour ses mémoires. Mais pas nous ! Oh non, nous nous sommes assurés que nos préoccupations en matière d'infrastructure sont bien découplées de notre modèle de domaine et de notre couche de service. Pour passer aux CSV, il suffira d'écrire quelques nouvelles classes Repository et UnitOfWork, et nous pourrons alors réutilisertoute notre logique de la couche de domaine et de la couche de service.
Voici un test E2E pour te montrer comment les CSV entrent et sortent :
Un premier test CSV (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',