Все три case`a функционально одинаковы, во 2-м и 3-м варианте
методы SendData() и RecvData() объединены в один SendRecv().
Какой код обладает наибольшей читаемостью? Мое мнение:
1. много if/else
2. много точек выхода
3. оптимизация в ущерб читаемости
CmdStatus = CMD_EXEC;
switch(Command)
{
...
case CommandSetMotoHourLimit:
if(SendData() == RET_OK)
{
if(RecvData() == RET_OK)
{
if(Data.Command == CommandReceived)
CmdStatus = CMD_COMPLETE;
else
CmdStatus = CMD_ERROR;
}
else
CmdStatus = CMD_ERROR;
}
else
CmdStatus = CMD_ERROR;
break;
case 1000:
if(SendRecv() != RET_OK)
{
CmdStatus = CMD_ERROR;
break;
}
if(Data.Command != CommandReceived)
{
CmdStatus = CMD_ERROR;
break;
}
CmdStatus = CMD_COMPLETE;
break;
case 1001:
if(SendRecv() == RET_OK && Data.Command == CommandReceived)
CmdStatus = CMD_COMPLETE;
else
CmdStatus = CMD_ERROR;
break;
}