Ho difficoltà a capire quando il Principio di Responsabilità Unica è usato correttamente. Considera il seguente codice:
// --------------------------------------------------------------------------------------------------
void CTCPClient::Try_Send_Data(const char *Outgoing_Message)
// --------------------------------------------------------------------------------------------------
{
Reset_Return_Value();
Copy_Data_Into_Buffer(Outgoing_Message);
try
{
if((strcmp(Outgoing_Message, "") != 0))
{
Send_Data();
Keep_Alive_Counter = 0; // reset as a button has been pressed
}
if(Return_Value < 0)
{
throw SEND_DATA_TCP_ERROR;
}
}
catch(EError_ID)
{
Error_Message = strerror(errno);
LOG_WARNING(__SOURCE__ << Error_Message);
}
}
Se dovessi leggere questo metodo per la prima volta, mi piacerebbe, come il nome sugest, aspettarmi un tentativo e prendere una dichiarazione. Ma prima di ciò sto chiamando due metodi aggiuntivi (Reset_Return_Value (), Copy_Data_Into_Buffer ()). L'SRP è già violato qui?
Inoltre nel metodo sto impostando "Keep_Alive_Counter = 0;". A mio parere, almeno a questo punto l'SRP è stato violato in aggiunta al fatto che, se dovessi essere qualcuno che non ha scritto il codice, semplicemente non si aspettava che questa linea fosse presente. Il problema che ho qui è: Se faccio questo in un metodo esplicito, sarà un metodo a una riga, qualcosa che incontro più spesso, mentre cerco di rendere noto l'SRP. Questi metodi mi sembrano ancora strani e non ho trovato risposta a quando sono considerati una buona pratica. Sempre? In alcuni casi? Mai?
Questo è il mio codice, quindi sentitevi liberi di criticare, purché sia costruttivo.
EDIT: Keep_Alive_Counter e Return_Value sono attributi di classe, che vengono modificati / utilizzati da altri metodi.