Upgrade to Pro — share decks privately, control downloads, hide ads and more …

VSA - Vertical Slice Architecture について深掘りしてみた

VSA - Vertical Slice Architecture について深掘りしてみた

この話は、2024年2月3日のFukuoka.NET Conf 2023で行った登壇「VSAについて深掘りしてみる」のスライドとなります。2023年11月に行われた、dotnet conf 2023のVertical Slice Architecture: How Does it Compare to Clean Architecture | .NET Conf 2023のまとめとなります。

その後、8つのVSAのサンプルコードを分析して、それぞれからアーキテクチャの選択の上でどんなトレードオフがあるのかを示します。

Tomohisa Takaoka

February 02, 2024
Tweet

More Decks by Tomohisa Takaoka

Other Decks in Technology

Transcript

  1. VSA - Vertical Slice Architecture について深掘り してみた Fukuoka.NET Conf 2023

    #dotnetconf 高丘 知央 株式会社ジェイテックジャパン スクショOK ソーシャルポストOK 質問大歓迎!!
  2. 自己紹介 高丘 知央 ( Tomohisa Takaoka ) 福岡出身、株式会社ジェイテックジャパンCTO 米国カリフォルニア州ロングビーチ在住(ロスの近く) •

    X : @tomohisa • Github : @tomohisa • Linkedin : tomohisatakaoka 自作キーボード、3Dプリント自作トラックボール製作 London Tech Talk ポッドキャストとブッククラブ出演 米国生活10年を超えて、あごひげに挑戦中 スクショOK ソーシャルポスト OK
  3. スクショOK ソーシャルポスト OK 株式会社ジェイテックジャパンについて • B2C, B2Bアプリケーションを開発、運用。主にAzureや Microsoftの技術スタックを採用 • 兄弟会社

    J-Tech Creations, Inc. は米国に拠点 • 東京とNew Yorkを拠点としたリモートチーム • 品川にある親会社の株式会社ジャパンテクニカル ソフトウェア(JTS)は、創業50年を超えた日本における歴史あ る総合IT企業 Sekiban は株式会社ジャパンテクニカルソフトウェア様のスポンサーのも とに開発されています
  4. VSAについての説明 #dotnetconf 2023 Vertical Slice Architecture: How Does it Compare

    to Clean Architecture By Luke Parker. スクショOK ソーシャルポスト OK
  5. VSAについての説明 Zennに同僚がまとめ記事を書い てくれました。 Vertical Slice Architecture に 関する .NET Conf

    2023 セッショ ンのまとめ 説明はこちらに詳しくあるのでご覧 ください! スクショOK ソーシャルポスト OK
  6. #dotnetconf トークのまとめ1 クリーンアーキテクチャのメリット • 大規模システム向けの高度な抽象化 • 技術変更に対する耐性 • テストが容易になる。 •

    一貫した速度で拡張していける。 • 複数チームでの作業分担が容易。 クリーンアーキテクチャのデメリット • 複雑で導入のハードルが高い。 • 開発速度は遅くなりやすい(しかし、複雑なシステ ムを長期間に渡って実装する場合にはクリーン アーキテクチャはとても有効)。 • シンプルな機能の実装のために、幾つものプロ ジェクトに大量のコードを書かなくてはならない。 スクショOK ソーシャルポスト OK
  7. #dotnetconf トークのまとめ4 Vertical Slice Architecture のメリット • 抽象化が少ない。各機能の構成は自由で、抽象化の層は 少なくなる。 •

    導入のハードルが低い。 • 技術変更が容易。機能がそれぞれ分離しているので、他 の機能に影響を与えずに個別の機能の技術を移行でき る。 • 機能ごとのテストがやりやすい。 • 複数チームでの作業がしやすい。共有コード以外のそれぞ れの機能について作業している場合、同じコードベース内 の他のチームや製品に影響を与える心配がないため、安 全に作業できる。 • デプロイが容易。各機能を個別にデプロイすることができ るため、開発・デプロイサイクルが速くなる。 スクショOK ソーシャルポスト OK
  8. #dotnetconf トークのまとめ5 Vertical Slice Architecture のデメリット • 機能ごとの連携の仕組みが必要。アプリ内の各機能は完 全に独立しているわけではなく、機能同士の通信が必要に なる場合もある。そのため、機能間のメッセージングを明確

    にしなくてはならず、それによって複雑性は増す。 • 共有コードと機能コードの線引きが難しい。また、複数の機 能に重複するコードが存在する可能性が高くなる。 • 機能ごとにコードの書き方が異なる可能性がある。複数の チームが別々の機能を開発するとそうなりやすく、後から 加わる開発者が機能ごとに全く異なるコードを見て混乱す るかもしれない。開発者は人間なので、認知負荷の問題は 考慮すべき重要な点である。 スクショOK ソーシャルポスト OK
  9. #dotnetconf トークのまとめ6 Lukeの結論 あなたのプロジェクトでVSAを使うべ き? It depends. (場合による) Just another

    tool in your toolbox.(ツールボックスに入れる新し いツール) スクショOK ソーシャルポスト OK
  10. • テストを行いやすい書き方を選択 ◦ テストを正しく書けないと複雑なシステムに対応できない ◦ どんな技術を選んでもテストの書きやすさを常に考える • 機能のスライスを超えて連携を取る ◦ 直接相互に呼びあうとスライスの原則が崩れる

    ◦ イベントドリブン - 通知のイベントを流し、反応して連結する機能 を作成する ◦ MediatRなどでイベントをアプリケーション内で扱う ◦ メッセージキューなどでイベントを扱う どのケースでも注意しなければいけない点 スクショOK ソーシャルポスト OK
  11. 以下の項目などに関してはそれぞれのプロジェクトで決定 • DbContext or Repository Interface? • DDD or not?

    • CQRS or not • Controller or Minimal API • 1 File Multiple Root Class or not. VSAで選択する各機能 スクショOK ソーシャルポスト OK
  12. DbContext or Repository Interface? • リポジトリインタフェースでデータアクセスが抽象化 • リポジトリインタフェースは書くコードが多くなる • DbContextは簡単に実装でき、テストもできる

    • ユースケースでビジネスロジックが多用され、保守性が悪くなる It Depends... VSAで選択する各機能(1) スクショOK ソーシャルポスト OK
  13. CQRS or not? • CQRS = コマンドクエリ責務分離 • コマンド+ハンドラー •

    クエリパラメーター+クエリレスポンス • 書き込みのモデルと読み込みのモデル、および各責務を分離することにより実 現できる • RDBでも実現可能だが、データベースのテーブルの型依存となり、クエリー処理 能力とのトレードオフ。 • イベントソーシングだとCQRSを実現しやすい It Depends... VSAで選択する各機能(3) スクショOK ソーシャルポスト OK
  14. Controller or Minimal API? • Controllerは以前からの.NETの記法 • VSAの場合1コントローラ、1APIとして記述 • Minimal

    APIはメソッドをAPIとしてマッピングするdotnetの新しい記法、 他の言語との親和性 • 関数の引数にDI、パラメータ、ヘッダーなどをマッピング • Minimal APIはテストも行いやすい It Depends... VSAで選択する各機能(4) スクショOK ソーシャルポスト OK
  15. Sekiban – イベントソーシング・ CQRSフレームワーク C#によるイベントソーシング、CQRSフレームワーク イベントストアは、Azure Cosmos DB or Amazon

    Dynamo DB 2023年12月にオープンソースソフトウェアとしてリリース 現時点で有料プランが存在せず、全ての機能を個人、業務 プロジェクトで無料で使用していただけます www.sekiban.dev/jp イベントソーシング+SekibanはVSAの実現の1つの方法と して非常に現実的な選択肢です! スクショOK ソーシャルポスト OK