MVC: dove devo archiviare gli algoritmi intercambiabili usati dal modello (i cui nomi devono anche essere accessibili alla vista)?

0

Considerare un programma, in cui l'utente sceglie un algoritmo da un elenco, e il modello di strategia viene utilizzato per impostare questo algoritmo come operazione del modello.

Ad esempio, un'applicazione di processione di immagini. Esistono numerosi algoritmi che possono essere utilizzati per manipolare un'immagine (scurire, illuminare, contrastare, ecc.). Sono tutti incapsulati in oggetti e il controllore imposta il modello per utilizzare un algoritmo da questo elenco. Gli algoritmi devono anche essere presentati per nome nell'interfaccia utente.

Ecco come funzionerà:

L'utente può selezionare un algoritmo da un elenco sulla GUI. Quando lo fa, il controllore riceve una notifica e imposta l'algoritmo adatto nel modello. Successivamente, quando il modello è chiamato model.operate() , delegherà l'operazione al suo attuale algoritmo. Modello di strategia classica.

Inoltre, la vista ha bisogno di accedere ai nomi degli algoritmi , in modo da consentire all'utente di sceglierne uno da una lista.

La mia domanda è questa:

Devo memorizzare gli algoritmi da qualche parte, dove il controller li preleverà da quando è necessario impostare un algoritmo nel modello? O il controller dovrebbe semplicemente istanziare un nuovo algoritmo ogni volta che è necessario impostare un algoritmo nel modello?

Se la risposta è che è bene memorizzare gli algoritmi da qualche parte - rispetto a dove?

Nel modello? - ha senso perché il modello incapsula la logica aziendale e i dati dell'app. Ma in che modo la vista preleverà i nomi degli algoritmi?

Nel controller? - ha senso perché il controller è quello che imposta gli algoritmi nel modello. E inoltre può offrire alla vista un metodo getAlgorithmNames() . Ma tecnicamente non dovrebbe contenere oggetti di business logic, che è quello che sono gli algoritmi.

In una classe diversa, dove chiunque sia interessato può recuperare gli algoritmi o i loro nomi da?

Sono sicuro che ci sono state molte applicazioni in cui l'utente seleziona un'operazione e l'algoritmo appropriato è impostato nel modello. Come fanno le altre applicazioni a fare questo?

    
posta Aviv Cohn 08.05.2014 - 15:50
fonte

1 risposta

1

Proprio per evitare un possibile equivoco, nel pattern MVC, la parte Model non è costituita da una singola classe, ma piuttosto il Modello comprende tutte classi che non si interfacciano con l'utente.
In termini semplici:

  • Visualizza : le classi che mostrano qualcosa all'utente (visualizzano l'output)
  • Controller : le classi che reagiscono alle azioni dell'utente
  • Modello : tutto il resto.

Ora alla tua domanda:

Gli algoritmi e l'elenco dei loro nomi appartengono alla parte del modello della tua applicazione.
Gli algoritmi stessi fanno parte della tua logica aziendale e appartengono al modello per questo motivo. E se il Modello sta mantenendo una raccolta di algoritmi, allora è naturale che il Modello possa fornire sia Controller che View con un elenco di algoritmi disponibili.

La selezione dall'elenco può funzionare in due modi:

  1. Il modello fornisce solo un elenco di nomi. La vista comunica il nome selezionato al controller, che richiede al modello un'istanza di un algoritmo con il nome specificato.
    È facile, ma richiede il confronto tra stringhe nel modello e può causare scompiglio con la localizzazione.
  2. Il modello fornisce un insieme di coppie (chiave, valore), in cui la chiave è un ID opaco che il modello può utilizzare per recuperare l'istanza specifica di un algoritmo e il valore è il nome predefinito dell'algoritmo.
    Ciò richiede un po 'più di lavoro, ma può essere utile nelle applicazioni localizzate (la Vista può mostrare i nomi tradotti senza il rischio di rotture) o in applicazioni eseguite localmente (il Modello potrebbe semplicemente usare un puntatore / riferimento all'oggetto algoritmo effettivo come chiave) .
risposta data 08.05.2014 - 16:13
fonte

Leggi altre domande sui tag