Sto sviluppando alcuni controlli personalizzati in un linguaggio orientato agli oggetti (usando Swift / Cocoa, ma questa è una domanda agnostica della tecnologia). In particolare, ho un insieme di pulsanti orizzontali e verticali che si comportano in modo molto simile, tranne per il fatto che uno è orientato verticalmente e l'altro orizzontalmente.
La mia domanda: qual è il modo corretto di strutturare queste due "cose" nel mio progetto:
Dovrei avere una classe genitore (astratta) con funzionalità comuni e quindi due classi concrete derivate per le specifiche necessarie per l'orizzontalità rispetto alla verticalità. Questo sembra il più corretto, ma dato che l'oggetto è composto da altri oggetti, la proliferazione di tutta la gerarchia della vista si sposterà verso il basso.
In alternativa, dovrei progettare una classe altamente generalizzata che abbia una proprietà per l'orientamento e quindi molta logica if / switch nel codice per guidare il comportamento basato su questo. Sembra un odore di codice.
Basta andare e creare due classi separate simili ma tecnicamente non correlate e basta fare una digitazione un po 'più ripetuta. Poiché così tante cose sono guidate dall'orientamento, questo sembra quasi più semplice di 1 sopra.
O c'è un'altra alternativa?
Altri esempi canonici in cui ciò si presenterebbe potrebbero essere orizzontali o verticali: - scrollers - impilare pannelli
Per tentare di chiarire in merito agli obiettivi e ai requisiti di progettazione, vorrei che la domanda rispondesse in termini di come Apple Software Architects avrebbe potuto avvicinarsi alla classe NSScrollView (o come qualsiasi grande organizzazione potrebbe avvicinarsi al codice di libreria UI simile con "mirror" orizzontale e componenti verticali).
La risposta influisce su diverse classi verticali e orizzontali correlate che aggregano questi pulsanti rispettivamente in righe e colonne poiché le stesse righe e colonne sono molto simili, salvo per l'orientamento verticale vs orizzontale.