先日の.NET Conf 2022 Recap EventでフロンドエンドフレームワークにはReactやVueなど様々なフレームワークがある中であえてBlazor WebAssemblyを選択する理由は何ですかというような質問がありました。
それに自分なりの回答を考えてみた。
もちろん、回答に合ったようにチームのスキルベースとしてC#とかBlazorのスキルを持っていてJavaScriptのそれよりも上であるためにBlazor WebAssemblyを選択するというのも一つの答えだろう。
私からの回答として2つ上げておきたい。
1つは、Blazor WebAssemblyテンプレートにあるASP.NET Core Hostedのオプションの存在である。
これを指定した場合、通常のClientプロジェクトに加え、ServerプロジェクトとSharedプロジェクトが作られる。
ClientプロジェクトはBlazor WebAssemblyのプロジェクトなので説明不要と思われる。
ServerプロジェクトはASP.NET Core Web APIプロジェクトとして作成される。
そして、Sharedプロジェクトは両者の共通オブジェクト定義のプロジェクトである。わかりやすくいうとWebAPIでやりとりするJSONの型定義がここでしておき、Clientプロジェクト、Serverプロジェクト双方から参照されているので、Clientプロジェクトではデシリアライズ時の型指定を、Serverプロジェクトではシリアライズの型定義をSharedプロジェクトのクラスを使ってあげることで、OpenAPIでありがちなサーバ側とクライアント側での定義が違うためにうまくいないということが発生しにくくなるというメリットがあります。
2つめに、クライアント側、サーバ側双方ともにC#とすることができるので、昼間に紹介されていたMessagePackなどの高速シリアライザーを採用することができます。
同じ言語が動作する環境であるのでオーバヘッドの大きいテキストシリアライザーに縛られる必要もないわけです。