Creo que mucha gente trata de diseñar soluciones en exceso. Adoptan el enfoque de "Adán y Eva" cuando un poco más práctico simplificaría mucho las cosas.
Las clases especializadas no son malas, son la consecuencia natural del diseño de software de sonido.
Muchos programadores, en mi opinión, no entienden esto y no hay ningún libro que conozca que lo deje claro.
Otra cosa que sin duda ayuda es TDD, que le permite comprender "cómo" utilizará la clase en la práctica y, en muchos casos, puede salvar el día, ya que muestra posibles problemas / limitaciones al principio del día.
Por último, otra cosa MUY importante que buscaría si fuera usted es el diseño de patrones. Los patrones de diseño son cómo las personas más inteligentes que tú o yo resolvemos problemas de programación. La idea detrás de los patrones, ¿adivina qué ?, es que no se deben usar como libros de cocina, recetas que simplemente se cierran allí, sino que reflexionan y comprenden el dominio de su aplicación en primer lugar.
Un uso racional del patrón reducirá en gran medida la cantidad de detalles que debe administrar.
Una buena biblioteca de patrones de diseño diseñada para satisfacer sus propias necesidades resultará invaluable. Veamos un ejemplo muy simple solo para poner las cosas en contexto:
imagine que tiene un formulario donde, cuando se presiona un botón, otros formularios tienen que actualizarse. Este es un patrón típico de "observador". Tienes un sujeto y varios observadores, que se registran con el sujeto. ¿Por qué necesitas implementar una interfaz? Simplemente puede agregar los métodos, o mejor aún, usar una interfaz para los observadores y una lista genérica para el tema. Ahora obtuviste lo mejor de ambos mundos: independencia para los observadores y nada de chismes sobre el tema.
Espero que tenga sentido para ti!
Andrea