ガイドや API リファレンスを含む完全なドキュメントはヘルプ サイトにあります。
また、私のブログの一連の投稿では、「オニオン レイヤー」アーキテクチャから仲介コマンド パターンの利用への移行に関するシリーズも作成しています。
AzureFromTheTrenches.Commanding は、次のような多くの重要な設計目標を備えた構成ベースの非同期コマンド メディエーター フレームワークです。
これらの目標をサポートするために、フレームワークは .NET Standard 2.0 (以降) をサポートしているため、さまざまなシナリオで使用でき、以下を可能にする完全にオプションの拡張パッケージが多数用意されています。
その機能を利用する必要はありませんが、必要に応じて、コア コードを変更せずに、時間をかけてこの機能を採用することができます。
まず、コマンド用の nuget パッケージをインストールします。
Install-Package AzureFromTheTrenches.Commanding
例として、2 つの数値を加算して結果を返すコマンドを作成してみましょう。
public class MathResult
{
public int Value { get; set; }
}
public class AddCommand : ICommand
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
}
コマンドはハンドラーによって処理され、追加ハンドラーは次のようになります。
public AddCommandHandler : ICommandHandler
{
public Task ExecuteAsync(AddCommand command, MathResult previousResult)
{
return new MathResult {
Value = command.FirstNumber + command.SecondNumber
};
}
}
コマンド、結果、ハンドラーを定義したら、これらをコマンド システムに登録する必要があります。コンソール アプリを作成しているだけの場合は、Program.cs でこれを行うことができますが、より現実的な使用方法では、IoC コンテナーを構成する場所でこれを行うことになります。コマンドの登録をアプリケーション構成の単なる別の部分として考えると便利です。さらに、コンテナへのアクセスが必要になります。以下の例は、Microsoft ASP.Net Core サービス プロバイダーへの登録を示しています。
// First register the commanding framework with the IoC container
IServiceProvider serviceProvider = null;
IServiceCollection serviceCollection = new ServiceCollection();
CommandingDependencyResolverAdapter adapter = new CommandingDependencyResolverAdapter(
(fromType, toInstance) => services.AddSingleton(fromType, toInstance),
(fromType, toType) => services.AddTransient(fromType, toType),
(resolveTo) => _serviceProvider.GetService(resolveTo));
ICommandRegistry registry = adapter.AddCommanding();
serviceProvider = serviceCollection.BuildServiceProvider();
// Now register our handler
registry.Register();
CommandingDependencyResolverAdapterクラスは、フレームワークを任意の IoC コンテナに登録できるようにするアダプターです。AddCommanding メソッドは、注入可能なコマンド インターフェイスを登録し、ハンドラーの登録を可能にするICommandRegistryインターフェイスを返します。ハンドラーを登録するだけで、フレームワークが認識します。残りは除外され、登録では簡潔で読みやすいコードを実現する流暢な API スタイルが使用されます。
コマンドをディスパッチするには、ICommandDispatcher インターフェイスを取得してコマンドを送信する必要があります。これを実行し、結果をコンソールに出力します。
ICommandDispatcher commandDispatcher = dependencyResolver.ServiceProvider.GetService();
MathResult mathResult = await commandDispatcher.DispatchAsync(new AddCommand { FirstNumber = 5, SecondNumber = 6});
Console.WriteLine(mathResult.Value); // hopefully says 11
簡単な使い方はこれだけです。この例は、依存関係を手動で解決しており、2 つの数値を加算するための多くのボイラープレートがあるため、少し不自然です。しかし、実際のシナリオでは、実際に行う必要があるのは、コマンド ハンドラーを適切な場所に登録することだけです。 ASP.Net Core を使用している場合、依存関係注入のボイラープレートはすべて適切に配置されています。
シンプルなメモリ内コマンド実行 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/InMemoryCommanding
HTTP 経由でコマンドをディスパッチする https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Client
HTTP 要求に応答してコマンドを実行する (ASP.Net Core) https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Web
Azure Storage キューへのディスパッチとキューからの実行 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageQueueCommanding
Azure ストレージの監査 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageAuditing
Azure イベント ハブの監査 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureEventHubAuditing
さらなる使用シナリオについては、Wiki を参照してください。
行き詰まった場合は、GitHub の問題を記録するか、Twitter (@azuretrenches) で私に連絡してください。できる限りお手伝いします。