Come progettare un'applicazione che legge i file usando il pattern MVC?

0

Ho intenzione di scrivere un'applicazione che legge i dati da un file csv e mostrare tali dati all'utente. Intendo applicare un modello di progettazione MVC per creare questa applicazione. Un utente interagirà con questa applicazione attraverso una console. Quindi la vista è una console.

Ci sarà un Main.java responsabile di:

  • Presentazione di un menu che un utente può scegliere nella console.
  • In grado di gestire l'evento nella console, ad es. un utente sceglie un'opzione per leggere due file csv e chiedere all'applicazione di visualizzare le differenze tra i due file csv.
  • Esegui la logica aziendale appropriata per gli eventi selezionati.

Per fare ciò, Main.java avrà un metodo Main che visualizza il menu a un utente in una console.

Sto considerando di rendere Main.java un controller, perché questa classe è responsabile per prendere l'input dell'utente e capire cosa fare con l'input. Per fare ciò, Main.java chiamerà una classe chiamata FileService.java, che è una classe di servizio. FileService.java è responsabile di:

  • Leggi un file CSV.
  • Visualizza il contenuto del file di testo ordinato secondo alcune regole.
  • Mostra il contenuto delle differenze di 2 file csv.

Il FileService analizzerà il file csv usando un parser csv e memorizzerà il contenuto dei file su un disco usando MapDB . L'intenzione di utilizzare MapDB è di consentire all'utente di leggere file di grandi dimensioni (ad es .: 5 GB) ed eseguire operazioni sul contenuto del file. Una volta letto il file, Main.java può visualizzare il contenuto del file o visualizzare le differenze tra i 2 file di testo, quando un utente seleziona l'opzione nella console.

Il FileService è concepito come parte del Modello in questa applicazione. E, il FileService è completamente disaccoppiato dalla vista e dal controller, che è il Main.java.

Questo semplice design raggiunge la separazione delle preoccupazioni indirizzate da MVC?

Risposta a @tgkprog:

dove si trova la vista? se main è il controller e FileService il modello / business part allora hai bisogno anche di una classe di visualizzazione.

Risposta : quando ho creato un'applicazione Web, una visualizzazione sarebbe, a titolo esemplificativo, una JSP o una pagina HTML. Nel contesto dell'applicazione di lettura file CSV, quale sarebbe l'equivalente di una pagina HTML o JSP? Questa è una cosa che non sono sicuro. Il menu visualizzato nella console può essere ottenuto semplicemente all'interno del metodo principale di Main.java.

se i file sono 5mb allora penso che un'app per console sarà abbastanza inadeguata per mostrare le differenze a meno che non ce ne siano pochissimi?

Risposta : potrei scaricare la differenza in un file di testo e consentire all'utente di visualizzare il file di testo. Questo sarebbe più utile per loro, penso. Grazie per avermelo segnalato.

    
posta zfranciscus 26.04.2013 - 13:17
fonte

1 risposta

2

In breve, vuoi creare un'app MVC che permetta a un utente di identificare un file; leggi il file; e quindi spingere il contenuto di quel file in un livello di database. Inoltre, si desidera trattare le routine di gestione dei file come un modello.

Visualizza

  • Questa sarà la tua applicazione per console che fornirà input e ampli utente; risposta.
  • L'utente può selezionare un file (con qualunque mezzo tu scelga)
  • La vista chiamerà il controller con nome / descrittore del file o lo lascerà in un posto dove il controllore può eseguire il polling e raccoglierlo. Avrei la vista chiamare il controller, ma sto solo indicando altri modi per farlo.

Regolatore

  • Riceve il nome del file da Visualizza
  • Chiama Model.FileServices con nome file
  • Riceve i dati restituiti da Model.FileServices, ovvero i contenuti del file.
  • Chiama Model.DBAccessLayer per memorizzare i dati restituiti da Model.FileServices.
  • Fornisci aggiornamenti a View riguardanti il progresso del trasferimento

Nota, finirai con almeno due moduli Modello. Uno per FileServices e uno per DBAccessLayer .

Quindi va tutto bene, ma con l'aumentare delle dimensioni del file, il tuo sistema potrebbe non avere memoria sufficiente per gestire l'intero contenuto del file. Esistono un paio di opzioni per risolvere il problema.

  1. Chiedi a FileServices di implementare una chiamata di tipo skip-take. Ciò ti consentirà di raccogliere i blocchi ### Byte dal file e di passare al modello DBA.

  2. Implementa un metodo all'interno di Model.DBA che essenzialmente crea un flusso tra FileServices e DBAccessLayer . Ciò rimuoverebbe il Controller dal comportarsi come un direttore del traffico, ma invece complica il DBAccessLayer .

Tra le due opzioni, preferirei la prima poiché ritengo che assegni in modo più appropriato le responsabilità per le azioni associate.

    
risposta data 26.04.2013 - 14:20
fonte

Leggi altre domande sui tag