¿Cuáles son (si los hay) los supuestos o restricciones implícitas y las diferencias de diseño como:Pregunta de patrón de estructura de clase. ¿Qué debería elegir?
a) Este:
class SampleClass1
{
IWorker workerA;
IWorker workerB;
void setWorkerA(IWorker w);
void setWorkerB(IWorker w);
WorkResult doWork();
}
B) frente a esto:
class SampleClass2
{
WorkResult doWork(IWorker workerA, IWorker workerB);
}
Sé que depende del proyecto específico, pero ¿qué ocurre si la clase anterior es parte de un marco pequeño? La primera clase es capaz de mantener el estado y separar los pasos de forma más natural, pero la segunda clase asegura una "comunicación en tiempo real" con la persona que llama de forma más natural ya que Worker se pasa cada vez que se llama a doWork().
¿Hay algún uso recomendado o prácticas genéricas que guíen la elección entre las dos formas anteriores? Gracias.
Creo que en este ejemplo básico, realmente no podemos llamar a A un mal diseño porque es solo un representante de una estructura de clase, no realmente la clase real. Además, doWork podría lanzar una excepción si no tiene una instancia de ambas clases, lo que podría ser aceptable. – scubabbl
Entiendo la pregunta como una pregunta de diseño. Y las clases como A) son típicas en mi humilde opinión para las clases que crean muchos problemas cuando se usan en otras partes del código. Pueden ser transparentes para el diseñador de la clase original, pero son puntos típicos de falla cuando los usa otra persona. – Thorsten79