Как залезть на несколько уровней абстракции ниже, не плодя кривой код? Есть приложение-прокси, которое запрашивает команды с сервера и отправляет их на нужные локальные адреса.
Прокси не знает и не заглядывает во внутренний формат команд, все они обрабатываются одинаково.
Возникла задача для двух определенных команд реализовать отдельную стратегию обработки с частичным разбором внутреннего формата.
На ум приходит некрасивое решение - непосредственно в общий код обработки команд добавить:if(command_type == A)
{
Xml.Parse(command_payload);
if(Xml.ContainsKey("some_key")
{
DoSomething1();
}
else
{
DoSomething2();
}
}
else
{
ProcessGenericCommand();
}
Понимаю, что это плохое решение, но опыта не хватает понять, как сделать лучше.
Как правильно решаются такие задачи?

21 Авг 2019 в 06:20
215 +1
0
Ответы
1

Для более элегантного и правильного решения задачи, можно воспользоваться паттерном стратегии.

Создайте интерфейс или абстрактный класс стратегии обработки команд:public interface CommandStrategy {
void processCommand(String commandPayload);
}Реализуйте отдельные классы стратегий для обработки каждой конкретной команды:public class CommandAStrategy implements CommandStrategy {
@Override
public void processCommand(String commandPayload) {
Xml.Parse(commandPayload);
if(Xml.ContainsKey("some_key")) {
DoSomething1();
} else {
DoSomething2();
}
}
}
public class CommandBStrategy implements CommandStrategy {
@Override
public void processCommand(String commandPayload) {
// обработка команды B
}
}В классе прокси используйте стратегию для обработки команды:public class Proxy {
private CommandStrategy commandStrategy;
public void setCommandStrategy(CommandStrategy commandStrategy) {
this.commandStrategy = commandStrategy;
}
public void processCommand(String commandPayload) {
commandStrategy.processCommand(commandPayload);
}
}

Теперь, при получении команды от сервера, вы можете выбрать соответствующую стратегию и использовать ее для обработки команды, не нарушая принципов чистоты и модульности кода.

20 Апр 2024 в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир