March 2025
Intermediate to advanced
304 pages
4h 33m
Japanese
この付録は、リポジトリ、Unit of Work、Service Layerパターンの利点を少し説明するためのものである。 第6章に続くものである。
FlaskのAPIを作り終え、リリースの準備を整えようとした矢先、ある企業が申し訳なさそうに私たちのところにやってきた。
普通なら、このようなことがあれば、チームは罵声を浴びせ、唾を吐き、回顧録のためのメモを作るかもしれない。 しかし我々は違う! いやいや、インフラへの懸念はドメインモデルやサービスレイヤーからうまく切り離されている。 CSVへの切り替えは、Repository とUnitOfWork のクラスを新しく書くだけの簡単なことで、ドメイン・レイヤーとサービス・レイヤーのロジックをすべて再利用することができる。
CSVがどのように出入りするかを示すE2Eテストだ:
最初の 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','qty','eta'],[batch1,sku1,100,''],[batch2,sku2,100,'2011-01-01'],[batch3,sku2,100,'2011-01-02'],])orders_csv=make_csv('orders.csv',[['orderid','sku','qty'],[order_ref,sku1,3],[order_ref,sku2,12],])run_cli_script(orders_csv.parent)expected_output_csv=orders_csv.parent/'allocations.csv'withopen(expected_output_csv)asf:rows=list(csv.reader(f))assertrows==[['orderid','sku','qty','batchref'],[order_ref,sku1,'3',batch1],[order_ref,sku2,'12',batch2],]
リポジトリやその他もろもろのことを考えずに飛び込んで実装する場合、次のようなものから始めるかもしれない:
CSV読者/ライターの最初のカット (src/bin/allocate-from-csv)
#!/usr/bin/env pythonimportcsvimportsysfromdatetimeimportdatetimefrompathlibimportPathfromallocationimportmodeldefload_batches(batches_path):batches=[]with
Read now
Unlock full access