Hai bisogno di consigli sulla progettazione di interazioni tra le varie parti della mia applicazione


10

Sto cercando di progettare le classi "principali" di un'applicazione Rich Desktop basata sulla piattaforma NetBeans 7. Questa applicazione consumerà servizi HTTP e, attraverso un "sistema push" su TCP, riceverà messaggi.

  • Siamo 3 sviluppatori e vogliamo sviluppare moduli in parallelo
  • L'applicazione sarà stratificata (dati, affari, presentazione)
  • Utilizzeremo il modello di presentazione per separare le responsabilità
  • Alcuni dati granulari (ad esempio un bean bean) saranno condivisi da più schermate (e possibilmente visualizzati su più schermate contemporaneamente)
  • ...

Siamo in grado di sviluppare schermate individuali, ma non sappiamo esattamente come organizzare l'intera applicazione e definire il contenuto di ciascun modulo.

  1. Quindi, hai qualche consiglio (un modello / best practice / libro / app di esempio) per coordinare / gestire le interazioni all'interno dell'intera applicazione?
  2. Qualche consiglio su come definire il contenuto dei moduli?

Grazie!


Piccolo esempio per illustrare ciò che voglio costruire: un'applicazione Foo User Management

  1. Avvia l'applicazione
  2. A sinistra [explorer] abbiamo un elenco di piattaforme (l'elenco è memorizzato in un file locale)
  3. Nella parte superiore abbiamo il pulsante per aggiungere una nuova piattaforma (disponibile anche con il tasto destro del mouse)
  4. Facendo doppio clic su una piattaforma, l'app chiama un servizio HTTP per recuperare un elenco completo di utenti. Questo elenco viene visualizzato in [editor] (in una tabella JT)
  5. Viene avviato un processo in background: tramite una connessione TCP riceviamo messaggi
  6. È possibile aggiungere un nuovo utente grazie a un pulsante in una barra degli strumenti

Se l'applicazione viene avviata su un altro PC e se l'utente è connesso alla stessa piattaforma, il suo Elenco utenti verrà aggiornato dinamicamente (aggiungi / rimuovi / stato: {offline / online}) (grazie ai messaggi)

In futuro verrà fornito un modulo di chat.

La mia domanda è (in altre parole): qualche consiglio / best practice per decidere il contenuto di ciascun modulo? Se PM (modello di presentazione) è un buon modo per separare view / business e dati e creare schermate, qual è il modo migliore per collegare più schermate in base a PM? Immagina di sviluppare il modulo di chat, come aggiungere una voce "Discuti con ..." al menu contestuale disponibile facendo clic con il tasto destro su Elenco utenti?


3
Non è chiaro cosa stai chiedendo. Che ne dici di fornire un piccolo esempio per illustrare la tua domanda?
Robert Harvey,

Ottimo post di Geertjan Wielenga. Contiene dichiarazioni di dichiarazioni di Tom Wheeler (membro del NetBeans Dream Team): java.dzone.com/news/how-to-split-into-modules
Destroyica,

Risposte:


5

Dato il tuo requisito, per iniziare con l'elaborazione di base, è necessario creare Pattern di comando e successivamente è possibile utilizzare Pattern di modelli per i processori di richieste. E così via. Non c'è niente chiamato un modello Master. Se ce ne fossero, non avranno più bisogno di noi.

L'idea è quella di avere un design che ti permetta di evolvere con i requisiti.

Vorrei iniziare creando un'interfaccia del modulo di base e dare l'interfaccia a tutti e ad alcune utility attorno ad essa. Consentire a tutti di implementare i propri moduli basati sul modulo base.


3

Penso che tu stia guardando un modello MVC piuttosto classico supportato dai servizi (RESTful suppongo). La chiave sarà quella di separare i servizi dall'interfaccia utente. Questo non perché stai introducendo un'interfaccia utente alternativa, ma perché ti dà chiarezza su come dovrebbe essere la tua interfaccia di servizio.

Pertanto, quando stai pensando al getPeopleservizio, assicurati di pensare a come un'interfaccia utente secondaria (non swing) interagirebbe con il servizio. Se lo tieni a mente, ti verrà in mente una soluzione abbastanza flessibile / disaccoppiata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.