Un modello di progettazione software per modellare il comportamento dipendente dal tempo di esecuzione

3

In un'intervista mi è stato chiesto,

Suppose we are going to create a software that runs on both desktop machines and smartphones. Name a software design pattern that could be used to enable the application to create different classes for display at runtime depending on the platform.

So che ci sono soluzioni semplici per implementare questa funzione nel codice reale. Ad esempio, in Java posso controllare le dimensioni del display e creare la classe adatta ( MobileDisplay o DesktopDisplay class) per quella visualizzazione.

Ma non so come questo sia collegato al design del software; a mio avviso, creare una classe adeguata basata su una piattaforma runtime è un problema di implementazione piuttosto che un problema di progettazione del software.

    
posta Isaac 24.04.2012 - 14:51
fonte

3 risposte

5

Penso che l'intervistatore si aspettasse il pattern di Abstract Factory. link E penso anche che ti manca il punto di progettazione del software. In definitiva, il software riguarda l'implementazione, ma un po 'di pensiero e modelli di progettazione rendono l'implementazione facile da seguire.

    
risposta data 24.04.2012 - 15:04
fonte
4

Posso solo fare una supposizione su ciò che intendeva il tuo intervistatore, ma "Schema del ponte" ti consente di scegliere tra implementazioni differenti (forse specifiche della piattaforma) per un'astrazione in fase di esecuzione. L'astrazione nel tuo caso potrebbe essere il display.

L'esempio originale nel book GOF per il pattern bridge lo dimostra utilizzando diverse implementazioni Window , una XWindowImp (per il sistema di finestre X-windows) e una PMWindowImp (per il sistema di windowing di IBM Presentation Manager) , che mi sembra molto simile alla tua domanda.

E, naturalmente, questo è un problema di design. Il mancato utilizzo del pattern bridge può anche portare a una soluzione funzionante, ma con una maggiore duplicazione del codice e un maggior numero di codice dipendente dalla piattaforma - e questo è il design - scegliendo il concetto giusto che porta a un codice migliore evolutivo o gestibile.

MODIFICA: una fabbrica astratta può essere utilizzata per istanziare e configurare le classi del bridge in fase di esecuzione, quindi il pattern AF può essere utile anche qui.

    
risposta data 24.04.2012 - 16:45
fonte
2

I pattern funzionano bene insieme. Non posso affermare di sapere esattamente cosa stava cercando il tuo intervistatore, ma avrei suggerito una combinazione di schemi:

MVC, MVVM, MVP sono tutti pattern che tentano di separare l'interfaccia utente dal modello / dati, consentendo più rappresentazioni visive per lo stesso modello / dati. Avrei scelto quello che mi era più familiare.

Da lì, in fase di runtime, è possibile utilizzare il metodo di fabbrica e / o l'iniezione delle dipendenze (qualunque sia il tipo di funzione che si desidera per costruttore / proprietà ecc.) per scegliere / creare un'istanza della vista pertinente. Considera che DI è uno schema e che i framework DI esistono principalmente per renderlo più semplice e più coerente / leggibile.

    
risposta data 24.04.2012 - 16:19
fonte

Leggi altre domande sui tag