内容
モジュラモノリスをaspnetcoreでやろうと思ったときに、モジュール間通信をMagicOnionでやれないかと試した内容になります。
構成
以下のように作っておけば
以下の構成にするのも容易かと思いました。
今回のサンプルは①を作成したものになります。
サンプル
vscodeでコンテナ起動してデバッグ起動すればサーバーが起動します。
ホスト側で
http://localhost:5002
を表示すれば動作します。
IFと実装の関連付け
MagicOnionでIFと実装が別のプロジェクトの場合の関連付けってどうするんだろうと思ってましたが、単純にDIで指定してあげればよかったです。同一プロジェクト内にIFと実装がある場合は指定を省略できるみたいです。
抜粋
builder.Services.AddTransient<IModularAUsecase, ModularAUsecase>();
builder.Services.AddTransient<IModularBUsecase, ModularBUsecase>();
まとめ
実装は簡単に出来ました。単純に関数呼び出しするのとほとんど変わらない印象です。
マイクロサービス化するときもgRPCサーバーを立ててチャンネル先を変更すれば良さそうです。
共有する引数や戻り値にはドメイン知識を使わずプリミティブ型に変換してからやりとりすれば密結合を防げると思いました。