Обратите внимание, что полную документацию, включая руководства и справочник по 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 и выполнение из них 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
Дополнительные сценарии использования можно найти в вики, включая:
Если вы застряли, сообщите о проблеме на GitHub или напишите мне в Твиттере на @azuretrenches, и я помогу, если смогу.