本文へスキップ
BecomeCoder

C#実践コース · 第7章 DDD ― ドメイン駆動設計 · レッスン44

集大成ミニプロジェクト ― ミニECの注文ドメイン(ローカル実施)

ローカル実施

導入

第一段階の総仕上げです。これまで学んだ全て——値オブジェクト・エンティティ・ドメインの振る舞い・リポジトリテスト——を使い、小さなEC(通販)の注文ドメインを作り切ります。dotnet testで自己採点します。

図解

flowchart LR
    VO["Money / Quantity<br/>(値オブジェクト)"] --> OI["OrderItem<br/>(商品×数量)"]
    OI --> O["Order<br/>(注文・エンティティ)"]
    O --> R["IOrderRepository<br/>(保存の契約)"]
    O --> T["テスト(xUnit)<br/>ルールを検証"]

進め方

  1. スターター116-capstone/starter.zipを展開し、MiniEc.slnを開く
  2. dotnet testを実行し、赤いテストを1つずつ緑にしていく(TDDの実践)
  3. すべて緑になったら完成
Visual Studioのテストエクスプローラーで、赤かったテストがすべて緑(成功)に変わった様子
テストエクスプローラー:仕様(テスト)をすべて緑にして完成

学ぶこと(テストで守る仕様)

// テストが要求する仕様の例(これを満たす実装を書く)
// ・Money_マイナス金額は生成できない(値オブジェクト)
// ・Order_合計金額は各明細の(単価×数量)の総和
// ・Order_確定後は明細を追加できない(不変条件)
  • 値オブジェクト・エンティティ・ドメインの振る舞いを総動員する
  • テストが「実行できる仕様書」として完成の基準になる(TDD)
  • リポジトリはインメモリ実装で用意(後からEF Core実装に差し替えてもDomainは無変更)

発展課題

  • API化: Minimal APIでPOST /orders(注文確定)エンドポイントを追加する
  • 永続化: インメモリリポジトリをEF Core + SQLite実装に差し替える(Domain層が無変更で済むことを確認)

まとめ

  • 学んだ全要素を統合して注文ドメインを作り切る
  • dotnet testで仕様を満たすことを自己採点
  • ここまで来れば「エンジニアとして手を動かす」土台が完成

次章: .NET Frameworkの外——ゲーム開発Unityへ進みます。