Quale modello di progettazione usi per supportare il fallback grazioso su vecchie piattaforme?

1

Diciamo che ho bisogno di aggiungere un'ombra esterna dietro una scatola. Alcune vecchie piattaforme non supportano le ombre esterne, quindi devo fingere mettendo un'immagine dietro la scatola. Ecco lo pseudo codice di come sto attualmente gestendo questo fallback:

if (dropShadowsAreSupported) {
    box.addDropShadow("black");
} else {
    box.putImageBehindIt("gaussianBlur.png");
}

È questo il modo giusto per gestirlo? Sembra troppo dilettante per me. Esiste un modello di progettazione migliore?

Nel mio progetto attuale, ci sono un sacco di posti in cui ho bisogno di personalizzare l'interfaccia utente in modo diverso per le diverse versioni del sistema operativo. Non è solo uno se non altro.

    
posta JoJo 31.05.2012 - 23:00
fonte

3 risposte

3

se hai intenzione di fare qualcosa del genere, la compilazione condizionale o le diverse implementazioni della libreria sono la chiave

in questo modo puoi dire

addShadow(box,black);

e in base alla libreria a cui lo si collega diventerà addDropShadow o addImageBehind

in C potresti anche dire

#IFDEF DROP_SHADOW_SUPPORTED
    box.addDropShadow("black");
#ELSE
    box.putImageBehindIt("gaussianBlur.png");
#ENDIF

estrai questo (o è già astratto) nella tua libreria grafica in modo che il codice sorgente non debba cambiare solo la libreria

    
risposta data 31.05.2012 - 23:10
fonte
7

Sembra un lavoro per il Pattern di strategia . Passa a una strategia di rendering e crea un'istanza della strategia di rendering basata sulla tua piattaforma.

    
risposta data 31.05.2012 - 23:04
fonte
2

Come ha detto Scott Whitlock, una strategia può fornire diverse implementazioni del comportamento. Detto questo, è probabilmente un eccesso di ingegnerizzazione nella custodia fornita. Non tutto deve adattarsi a un modello; alcuni semplici comportamenti condizionali come questo vanno bene come un semplice condizionale. Non c'è bisogno di complicare le cose se non è necessario.

    
risposta data 31.05.2012 - 23:26
fonte

Leggi altre domande sui tag