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
    質問大歓迎!!

    View full-size slide

  2. 自己紹介
    高丘 知央 ( Tomohisa Takaoka )
    福岡出身、株式会社ジェイテックジャパンCTO
    米国カリフォルニア州ロングビーチ在住(ロスの近く)
    ● X : @tomohisa
    ● Github : @tomohisa
    ● Linkedin : tomohisatakaoka
    自作キーボード、3Dプリント自作トラックボール製作
    London Tech Talk ポッドキャストとブッククラブ出演
    米国生活10年を超えて、あごひげに挑戦中
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  3. スクショOK ソーシャルポスト
    OK
    株式会社ジェイテックジャパンについて
    ● B2C, B2Bアプリケーションを開発、運用。主にAzureや
    Microsoftの技術スタックを採用
    ● 兄弟会社 J-Tech Creations, Inc. は米国に拠点
    ● 東京とNew Yorkを拠点としたリモートチーム
    ● 品川にある親会社の株式会社ジャパンテクニカル
    ソフトウェア(JTS)は、創業50年を超えた日本における歴史あ
    る総合IT企業
    Sekiban は株式会社ジャパンテクニカルソフトウェア様のスポンサーのも
    とに開発されています

    View full-size slide

  4. VSAとは何?
    Vertical Slice Architecture を略してVSA
    日本語訳は...
    バーティカルスライスアーキテクチャ?
    縦割りアーキテクチャ?
    定まったものはないみたい。
    (誰か決めてくれないかな)
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  5. VSAについての説明
    #dotnetconf 2023
    Vertical Slice Architecture:
    How Does it Compare to
    Clean Architecture
    By Luke Parker.
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  6. VSAについての説明
    Zennに同僚がまとめ記事を書い
    てくれました。
    Vertical Slice Architecture に
    関する .NET Conf 2023 セッショ
    ンのまとめ
    説明はこちらに詳しくあるのでご覧
    ください!
    スクショOK ソーシャルポスト
    OK

    View full-size slide

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

    View full-size slide

  8. #dotnetconf トークのまとめ2
    近接性の原理
    “一緒に変更されるコード
    は一緒に配置されるべき
    である。”
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  9. #dotnetconf トークのまとめ3
    1. それぞれの機能ごとにフォルダを作成して、各レイヤーのコードを機能フォルダにまとめる
    2. それぞれのレイヤーの実装は自由!揃えることも可能だし、変えてもオーケー
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  10. #dotnetconf トークのまとめ4
    Vertical Slice Architecture のメリット
    ● 抽象化が少ない。各機能の構成は自由で、抽象化の層は
    少なくなる。
    ● 導入のハードルが低い。
    ● 技術変更が容易。機能がそれぞれ分離しているので、他
    の機能に影響を与えずに個別の機能の技術を移行でき
    る。
    ● 機能ごとのテストがやりやすい。
    ● 複数チームでの作業がしやすい。共有コード以外のそれぞ
    れの機能について作業している場合、同じコードベース内
    の他のチームや製品に影響を与える心配がないため、安
    全に作業できる。
    ● デプロイが容易。各機能を個別にデプロイすることができ
    るため、開発・デプロイサイクルが速くなる。
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  11. #dotnetconf トークのまとめ5
    Vertical Slice Architecture のデメリット
    ● 機能ごとの連携の仕組みが必要。アプリ内の各機能は完
    全に独立しているわけではなく、機能同士の通信が必要に
    なる場合もある。そのため、機能間のメッセージングを明確
    にしなくてはならず、それによって複雑性は増す。
    ● 共有コードと機能コードの線引きが難しい。また、複数の機
    能に重複するコードが存在する可能性が高くなる。
    ● 機能ごとにコードの書き方が異なる可能性がある。複数の
    チームが別々の機能を開発するとそうなりやすく、後から
    加わる開発者が機能ごとに全く異なるコードを見て混乱す
    るかもしれない。開発者は人間なので、認知負荷の問題は
    考慮すべき重要な点である。
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  12. #dotnetconf トークのまとめ6
    Lukeの結論
    あなたのプロジェクトでVSAを使うべ
    き?
    It depends. (場合による)
    Just another tool in your
    toolbox.(ツールボックスに入れる新し
    いツール)
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  13. VSAサンプルコードの分析
    VSAのサンプルコードが多くあり、そ
    れぞれのサンプルコードを読んで分
    析して見ました。
    (8つのサンプル)
    Vertical Slice Architectureのサ
    ンプルコードを分析してみる
    Zennにブログを書きましたのでご覧
    ください。
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  14. VSAサンプルコードの分析

    View full-size slide

  15. VSAサンプルを見てみる
    VerticalSliceArchitecture
    テンプレート
    ローカルにインストール可能
    dotnet new install Hona.VerticalSliceArchitecture.Template
    新規プロジェクトを作成できる
    mkdir Sprout
    cd Sprout
    dotnet new hona-vsa
    デモ

    View full-size slide

  16. 各サンプルの各機能の実装方法も様々
    It depends.
    機能ごとに技術を選択することが可能だが、ある程度の
    ルールを作らないと複数人での開発は破綻する
    ソフトウェア開発のトレードオフと誤りの本はおすすめ
    ● どのどのケースでも注意しなければいけない点
    ● 各機能で選択可能な点
    VSAサンプルの傾向
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  17. ● テストを行いやすい書き方を選択
    ○ テストを正しく書けないと複雑なシステムに対応できない
    ○ どんな技術を選んでもテストの書きやすさを常に考える
    ● 機能のスライスを超えて連携を取る
    ○ 直接相互に呼びあうとスライスの原則が崩れる
    ○ イベントドリブン - 通知のイベントを流し、反応して連結する機能
    を作成する
    ○ MediatRなどでイベントをアプリケーション内で扱う
    ○ メッセージキューなどでイベントを扱う
    どのケースでも注意しなければいけない点
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  18. 以下の項目などに関してはそれぞれのプロジェクトで決定
    ● DbContext or Repository Interface?
    ● DDD or not?
    ● CQRS or not
    ● Controller or Minimal API
    ● 1 File Multiple Root Class or not.
    VSAで選択する各機能
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  19. DbContext or Repository Interface?
    ● リポジトリインタフェースでデータアクセスが抽象化
    ● リポジトリインタフェースは書くコードが多くなる
    ● DbContextは簡単に実装でき、テストもできる
    ● ユースケースでビジネスロジックが多用され、保守性が悪くなる
    It Depends...
    VSAで選択する各機能(1)
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  20. DDD or not?
    ● ドメインモデリングにより複雑なビ
    ジネスロジックを集約できる
    ● モデリングには高度な業務理解と
    モデリングのスキルが必要
    ● VSAでもDDDは重要だし、可能
    It Depends...
    VSAで選択する各機能(2)
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  21. CQRS or not?
    ● CQRS = コマンドクエリ責務分離
    ● コマンド+ハンドラー
    ● クエリパラメーター+クエリレスポンス
    ● 書き込みのモデルと読み込みのモデル、および各責務を分離することにより実
    現できる
    ● RDBでも実現可能だが、データベースのテーブルの型依存となり、クエリー処理
    能力とのトレードオフ。
    ● イベントソーシングだとCQRSを実現しやすい
    It Depends...
    VSAで選択する各機能(3)
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  22. Controller or Minimal API?
    ● Controllerは以前からの.NETの記法
    ● VSAの場合1コントローラ、1APIとして記述
    ● Minimal APIはメソッドをAPIとしてマッピングするdotnetの新しい記法、
    他の言語との親和性
    ● 関数の引数にDI、パラメータ、ヘッダーなどをマッピング
    ● Minimal APIはテストも行いやすい
    It Depends...
    VSAで選択する各機能(4)
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  23. 1つのファイルに複数のルートクラスを置くか?
    ● VSAのサンプルは1ファイルに複数のクラスをおいているものが多い
    → 一覧性はよい
    ● 複数ファイルを置いた場合、ファイル名検索で出てこない
    ● IDEが充実していると、探すのは難しくはない
    ● 機能が大きくなるとファイルが大きく、共同作業がしにくくなる
    It Depends...
    VSAで選択する各機能(5)
    スクショOK ソーシャルポスト
    OK

    View full-size slide

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

    View full-size slide

  25. まとめ
    全ての技術選択にはトレードオフが存在する
    It depends...
    明らかな誤りを理解し避ける
    ツールボックスを増やすこと、それぞれのツール
    を磨いていくこと
    良いツールを使って充実した開発を!
    スクショOK ソーシャルポスト
    OK

    View full-size slide

  26. 株式会社ジェイテックジャパン
    The End
    質疑応答

    View full-size slide