Slide 1

Slide 1 text

VSA - Vertical Slice Architecture について深掘り してみた Fukuoka.NET Conf 2023 #dotnetconf 高丘 知央 株式会社ジェイテックジャパン スクショOK ソーシャルポストOK 質問大歓迎!!

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

VSAサンプルコードの分析

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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