При современной разработке программного обеспечения крайне важно реализовать чистую и эффективную архитектуру. Одним из важнейших аспектов любого приложения является обработка команд, которые представляют действия или намерения пользователей или других систем. Чтобы упростить этот процесс, многие разработчики используют шаблон под названием CommandGateway. В этой статье мы углубимся в назначение CommandGateway и рассмотрим несколько методов с примерами кода, чтобы продемонстрировать, как он упрощает обработку команд в вашем приложении.
Понимание CommandGateway:
CommandGateway — это шаблон, который действует как центральная точка входа для отправки команд внутри приложения. Он предоставляет удобный интерфейс для отправки команд соответствующим обработчикам. Инкапсулируя сложность маршрутизации и выполнения команд, CommandGateway способствует слабой связи и повышает удобство обслуживания.
Методы CommandGateway:
Вот несколько распространенных методов, предоставляемых CommandGateway, а также примеры кода:
- send(command):
Методsendпозволяет отправлять команду на асинхронное выполнение. CommandGateway направит команду соответствующему обработчику команд в зависимости от ее типа. Вот пример отправки команды с использованием CommandGateway в Java:
commandGateway.send(new CreateOrderCommand(orderId, items));
- sendAndWait(command):
МетодsendAndWaitсинхронно отправляет команду и ожидает результата. Это полезно, когда вам нужна немедленная обратная связь или вы хотите напрямую обрабатывать исключения. Вот пример использованияsendAndWaitв C#:
var result = commandGateway.SendAndWait(new UpdateUserCommand(userId, userDetails));
- sendWithResult(command):
МетодsendWithResultпохож наsendAndWait, но возвращаетCompletableFutureили аналогичную конструкцию, которая позволяет обрабатывать результат асинхронно. Вот пример на Kotlin:
val future = commandGateway.sendWithResult(DeleteProductCommand(productId))
future.thenAccept { result ->
// Handle the result here
}
- sendAndWaitTimeout(command, timeout):
Этот метод представляет собой разновидностьsendAndWait, но включает параметр времени ожидания. Он отправляет команду синхронно, но перед возвратом ждет только указанное время. Это предотвращает блокировку на неопределенный срок. Вот пример на Python:
result = command_gateway.send_and_wait_timeout(UpdateProfileCommand(userId, profileData), timeout=10)