My only concern with what you have proposed is that the request handler function could grow quite large
Use a 2 stage architecture:
The requesthandler should only dispatch the request to the right function, something like below.
This keeps the requestEvent rather small and focussed. Every command has its own function.
void requestEvent()
{
switch(CMD)
{
case 0x01: ABC(); break;
case 0x02: XYZ(); break;
case 0x03: PQR(); break;
case 0x04: KLM(); break;
default: break; // do nothing
}
}
void ABC()
{
byte value = readsensor();
send(value);
}