Penso che molte persone provino a progettare troppo le soluzioni. Adottano l'approccio "Adamo ed Eva" quando solo uno leggermente più pratico semplificherebbe notevolmente le cose.
Le classi specializzate non sono cattive, sono la naturale conseguenza della progettazione di software audio.
Molti programmatori, a mio avviso, non riescono a capirlo e non c'è nessun libro di cui sia a conoscenza che lo chiarisca chiaramente.
Un'altra cosa che sicuramente aiuta è il TDD, che ti permette di capire "come" utilizzerai la classe in pratica e può in molti casi salvare la giornata, perché mostra eventuali problemi / limitazioni all'inizio della giornata.
Infine, un'altra cosa MOLTO importante che vorrei cercare se fossi in te sono i modelli di progettazione. I modelli di progettazione sono il modo in cui le persone più intelligenti di te o di me risolvono i problemi di programmazione. L'idea alla base di schemi, indovina un po '?, è che non devono essere usati come libri di cucina, ricette che devi solo sbattere lì, ma pensosamente e prima di tutto capire il dominio dell'applicazione.
Un uso saggio del modello ridurrà notevolmente la quantità di dettagli che devi gestire.
Una buona libreria di modelli di design progettata intorno alle tue esigenze, si rivelerà preziosa. Vediamo un esempio molto semplice solo per mettere le cose nel contesto:
immagina di avere un modulo in cui, quando si preme un pulsante, altri moduli devono aggiornarsi. Questo è un tipico schema "osservatore". Hai un soggetto e diversi osservatori, che li registrano con l'argomento. Perché è necessario implementare un'interfaccia? Puoi semplicemente aggiungere i metodi o, meglio ancora, utilizzare un'interfaccia per gli osservatori e un elenco generico per l'argomento. Ora hai il meglio di entrambi i mondi: indipendenza per gli osservatori e niente cose bizzarre sull'argomento.
Spero abbia senso per te!
Andrea