Domanda MVC per un'applicazione console con più controller?

1

La mia domanda riguarda un'applicazione per console dell'amministratore. I requisiti intorno a questo sono che gli amministratori dovrebbero essere in grado di accedere (altri tipi di utenti non possono), e dovrebbero quindi essere in grado di fare cose come esaminare richieste dagli utenti, assegnare richieste a se stessi, vietare gli utenti (temporaneamente o permanentemente), e concedere / revocare le autorizzazioni per altri utenti. Tutte le attività devono essere registrate.

È un'applicazione in stile console. Non come UNIX ma piuttosto con un'interfaccia stile opzione. Cioè 1) Divieto utente, 2) Visualizza richieste .... e così via, e l'utente seleziona un numero e viene richiesto per qualsiasi informazione necessaria.

Sto provando a disegnare un diagramma di classe per questo. L'ho provato alcune volte in passato, ma voglio farlo bene, quindi è estensibile e seguire un pattern MVC. Per esempio. se ho deciso di aggiungere una vista GUI in un secondo momento, mi piacerebbe poterlo fare facilmente.

Quindi questo è quello che sto pensando. Apprezzerei il feedback sul mio modo di pensare e su cosa potrei fare in modo diverso ...

  • Il metodo handle () di InitController viene eseguito per primo. InitController ha un oggetto View (un'interfaccia, attualmente realizzata solo dalla classe ConsoleView).
  • InitController invia a ConsoleView una stringa (inserisci un nome utente) e recupera qualsiasi cosa l'utente digiti. Quindi fa lo stesso per la password.
  • InitController ha un oggetto che va e verifica che le credenziali siano corrette nel database e restituisce true / false.
  • Supponendo che le credenziali siano corrette, InitController chiama quindi il metodo handle () all'interno di MainMenuController.

  • MainMenuController invia le opzioni alla vista da stampare e la vista restituisce l'opzione selezionata. (le opzioni qui potrebbero essere 1: Ban, 2: Richieste, 3: Privilegi o qualcosa di simile).

  • Se l'opzione 1 è stata premuta, handle () viene chiamato in BanController. Se viene premuto l'opzione 2, handle () viene chiamato nel RequestsController. E così via.

Ciò richiede che MainMenuController abbia un BanController, RequestsController e un PermissionController che suona male per me, o può semplicemente non essere evitato? Va bene per i controllori conoscersi l'un l'altro in MVC o sono destinati a essere tenuti separati?

Anche tutti i controller hanno un oggetto Logger, quindi possono chiamare Logger.log () per registrare tutte le attività.

La vista dovrebbe fare di più? Al momento prende solo le opzioni e poi calcola come visualizzarle all'utente. In questo caso, stampandoli. E poi rimanda la risposta dell'utente.

Apprezzo qualsiasi guida con questo. Grazie.

MODIFICA: quando il controllore passa le opzioni alla vista, può farlo inviando oggetti Option. Queste Opzioni possono avere un int (quale opzione sono), String (descrizione dell'opzione da stampare) e un Controller - quindi se questa opzione viene selezionata, la Vista può chiamare option.getController (). Handle (). Sarebbe meglio una cosa del genere? Ciò impedirebbe ai controllori di conoscersi reciprocamente? Ma poi la vista è a conoscenza del controller.

EDIT 2: Un'altra linea di pensiero che ho pensato è: invece che il controller è la prima cosa da eseguire, è una classe chiamata InitialConsoleView e in cui stampo semplicemente i prompt per nome utente e password. Vengono quindi passati a LoginController, che restituisce true / false a seconda che le credenziali siano valide. Se lo sono, InitialConsoleView chiama un metodo in MainMenuView.

Finirei con molti più oggetti View, e questa volta le Views si conoscono l'una sull'altra invece che i Controllers conoscono l'un l'altro come prima. Questo mi sembra ancora una brutta cosa.

Ho letto molto materiale su MVC, ma ho davvero smesso di farlo.

    
posta Chris 07.06.2015 - 16:24
fonte

0 risposte

Leggi altre domande sui tag