Отступ, если/другой подход


У меня есть поток, где, если определенное условие истинно, то я должен принять другой подход. Это условие может быть вызвано различными сценариями. Но каждое условие испытания должно быть сделано, только если последнее не удалось. Когда условие True, нет логических тестов. Мой вопрос заключается в том, как сделать это в элегантный способ, как я делаю это сейчас требуется отступ для каждого состояния.

    StatusCode statusCode = null;
    boolean invokeService = true;
    CardPort cardPort = findCardPort(card, port);
    if (cardPort == null) {
        statusCode = StatusCode.CARD_PORT_NOT_FOUND;
    } else {
        Sim sim = cardPort.getSim();
        if (sim == null) {
            statusCode = StatusCode.CARD_WITHOUT_SIM;
        } else {
            User user = sim.getUser();
            if (user == null) {
                statusCode = StatusCode.SIM_WITHOUT_USER;
            }
        }
    }

    if (statusCode != null) {
        invokeService = false;
    }


276
5
задан 18 октября 2011 в 05:10 Источник Поделиться
Комментарии
1 ответ

Лично я хотел выделить это в несколько функций:

public StatusCode GetStatus( ... )
{
CardPort cardPort = findCardPort(card, port);
if (cardPort == null) {
return StatusCode.CARD_PORT_NOT_FOUND;
}

Sim sim = cardPort.getSim();
if (sim == null) {
return StatusCode.CARD_WITHOUT_SIM;
}

User user = sim.getUser();
if (user == null) {
return StatusCode.SIM_WITHOUT_USER;
}

return null; /* IMO, should be StatusCode.OK instead of null */
}

public bool ShouldInvokeService( ... )
{
return GetStatus( ... ) == null;
}

Теперь вам не нужны вложенные отступы для отслеживания статуса государства-просто проверить условия, пока вы не знаете все нормально, или вы столкнулись с проблемой.

10
ответ дан 18 октября 2011 в 07:10 Источник Поделиться