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

21 Авг 2019 в 06:20
188 +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 Апр в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир