가이드 및 API 참조를 포함한 전체 문서는 도움말 사이트에서 찾을 수 있습니다.
또한 내 블로그의 일련의 게시물에는 "양파 레이어" 아키텍처에서 중재된 명령 패턴을 사용하는 방법에 대한 시리즈가 있습니다.
AzureFromTheTrenches.Commanding은 다양한 주요 설계 목표를 갖춘 구성 기반 비동기 명령 중재자 프레임워크입니다.
이러한 목표를 지원하기 위해 프레임워크는 .NET Standard 2.0 이상을 지원하므로 다양한 시나리오에서 사용할 수 있으며 완전히 선택적인 여러 확장 패키지를 사용하여 활성화할 수 있습니다.
해당 기능을 활용할 필요는 없지만 원하는 경우 핵심 코드를 변경하지 않고도 시간이 지나면서 채택할 수 있습니다.
먼저 명령을 위해 nuget 패키지를 설치하십시오.
Install-Package AzureFromTheTrenches.Commanding
예를 들어 두 숫자를 더하고 결과를 반환하는 명령을 만들어 보겠습니다.
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 핵심 서비스 공급자 등록을 보여줍니다.
// 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
간단한 사용법으로는 그게 전부입니다. 이 예는 종속성을 직접 해결하고 두 개의 숫자를 함께 추가하는 상용구가 많기 때문에 약간 조작된 것입니다. 그러나 실제 시나리오에서 실제로 해야 할 일은 적절한 위치에 명령 처리기를 등록하는 것뿐입니다. 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)에서 저를 만나주세요. 가능하다면 도와드리겠습니다.