Recentemente mi sono imbattuto nella seguente situazione.
class A{
public:
void calculate(T inputs);
}
In primo luogo, A
rappresenta un oggetto nel mondo fisico, che è un argomento valido per non dividere la classe. Ora, calculate()
risulta essere una funzione piuttosto lunga e complicata. Percepisco tre possibili strutture per questo:
- scrivilo come un muro di testo - vantaggi - tutte le informazioni sono in un posto
- scrivi
private
funzioni di utilità nella classe e usale nel corpo dicalculate
- svantaggi - il resto della classe non sa / cura / capisce di questi metodi -
scrivi
calculate
nel seguente modo:void A::calculate(T inputs){ auto lambda1 = () [] {}; auto lambda2 = () [] {}; auto lambda3 = () [] {}; lambda1(inputs.first_logical_chunk); lambda2(inputs.second_logical_chunk); lambda3(inputs.third_logical_chunk); }
Può essere considerata una buona o cattiva pratica? Questo approccio rivela qualche problema? Tutto sommato, dovrei considerare questo un buon approccio quando mi trovo di nuovo di fronte alla stessa situazione?
EDIT:
class A{
...
public:
// Reconfiguration of the algorithm.
void set_colour(double colour);
void set_density(double density);
void set_predelay(unsigned long microseconds);
void set_reverb_time(double reverb_time, double room_size);
void set_drywet(double left, double right);
void set_room_size(double value);;
private:
// Sub-model objects.
...
}
Tutti questi metodi:
- ottieni un valore
- calcola altri valori, senza utilizzare lo stato
- chiama alcuni degli "oggetti sotto-modello" per cambiare il loro stato.
Si scopre che, eccetto set_room_size()
, quei metodi passano semplicemente il valore richiesto agli oggetti secondari. set_room_size()
, d'altra parte, fa un paio di schermate di formule oscure e poi (2) fa una mezza schermata di richiami di sub-oggetti setter per applicare i vari risultati ottenuti. Pertanto, ho separato la funzione in due lambda e li ho chiamati alla fine della funzione. Se fossi riuscito a dividerlo in parti più logiche, avrei isolato più lambda.
Indipendentemente da ciò, l'obiettivo della domanda corrente è determinare se quel modo di pensare debba persistere, o nel migliore dei casi non aggiungendo valore (leggibilità, manutenibilità, debug-abilità ecc.).