Recientemente me encontré con la siguiente situación.
class A{
public:
void calculate(T inputs);
}
En primer lugar, A
representa un objeto en el mundo físico, que es un argumento sólido para no dividir la clase. Ahora, calculate()
resulta ser una función bastante larga y complicada. Percibo tres posibles estructuras para ello:
- escríbalo como un muro de texto - ventajas - toda la información está en un solo lugar
- escriba las funciones de la utilidad
private
en la clase y úselas en el cuerpo decalculate
- desventajas - el resto de la clase no sabe / cuida / entiende sobre esos métodos -
escriba
calculate
de la siguiente manera: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); }
¿Se puede considerar esto como una buena o mala práctica? ¿Este enfoque revela algún problema? En general, ¿debería considerar esto como un buen enfoque cuando me enfrento nuevamente con la misma situación?
EDITAR:
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.
...
}
Todos esos métodos:
- obtener un valor
- calcular algunos otros valores, sin usar el estado
- llame a algunos de los "objetos de submodelo" para cambiar su estado.
Resulta que, exceptuando set_room_size()
, esos métodos simplemente pasan el valor solicitado a los subobjetos. set_room_size()
, por otro lado, hace un par de pantallas de fórmulas oscuras y luego (2) hace la mitad de una pantalla de llamadores de subobjetos para aplicar los diversos resultados obtenidos. Por lo tanto, he separado la función en dos lambdas y las llamo al final de la función. Si hubiera podido dividirlo en partes más lógicas, habría aislado más lambdas.
En cualquier caso, el objetivo de la pregunta actual es determinar si esa forma de pensar debe persistir o, en el mejor de los casos, no agrega valor (legibilidad, capacidad de mantenimiento, capacidad de depuración, etc.).