Hai ragione a voler cambiare tecnica. Puoi immaginare tutto il lavoro che dovresti fare ogni volta che devi aggiungere un nuovo tema.
Vista sottoclasse / controller
Alcuni programmatori possono scegliere di sottoclasse il controllore della vista di base per prendere in considerazione più temi. Se gli adattamenti che devi applicare tra il tema e il tema sono radicalmente diversi, allora questo approccio va bene. Tuttavia, la maggior parte delle volte i temi condividono molte caratteristiche comuni e si potrebbe finire per dover cambiare molto poco tra di loro.
Tema sottoclasse
Il secondo approccio elimina questo problema avendo una classe "tema" condivisa che fa molto del lavoro comune tra i temi. Mantiene anche la tua classe di visualizzazione a scelta singola (e quindi più facile da leggere) e non deve preoccuparsi di piccole sfumature come i cambi di tema. Poiché questo approccio elimina tutti gli svantaggi del 1 ° approccio senza alcuno svantaggio aggiuntivo (a meno che "le classi in eccesso" siano qualcosa che consideri uno svantaggio), questo approccio è la migliore pratica in generale.
Fai il meglio che puoi per usare il principio del controllo inversione e chiedi al tuo view / controller di chiamare la classe del tema per svolgere compiti specifici del tema come disegnare un controllo, passando tutte le informazioni necessarie su detto controllo nel metodo. In questo modo, il tema è stateless e si mantiene il controllo nel controller senza dover sapere come funziona. Inoltre, è possibile avere un comportamento a tema di base nella classe del tema di base in modo che anche se non si esegue l'override del metodo, si è sicuri di vedere sempre qualcosa , anche se potrebbe non essere a tema.
Spero che questo aiuti.