Sto lavorando all'applicazione client-server. L'architettura client (gerarchia di classi) ha il seguente aspetto:
-
System
(il nome è ovviamente diverso, più descrittivo) - rappresenta l'intero sistema-
Module A
: un'istanza di classe che rappresenta un modulo. Un modulo = gruppo di dati e operazioni simili -
User Module
- un altro modulo-
Users
- istanza di classe che rappresenta la raccolta di utenti, consente di aggiungere, rimuovere, leggere, ecc. -
Groups
- rappresenta i gruppi di utenti
-
- ecc.
-
L'architettura sopra rappresenta il sistema, i dati, le operazioni. Gestisce le richieste dei client e le risposte del server. Richiede le query nella cache se necessario. Ma NON gestisce la GUI, per questo uso codice separato. La maggior parte delle GUI utilizza la vista per la visualizzazione di dati che si basa su una logica semplice: un tipo di vista (classe) rappresenta una vista di un tipo (singolo) di un elemento. Ad esempio UserView
visualizza i dati sull'utente (dall'istanza User
).
Spesso l'oggetto rappresenta una collezione di oggetti. Ad esempio, potrebbe esserci una voce come UserEvent
che contiene un nome (dell'evento), una data e un elenco di utenti. Tuttavia, l'elenco degli utenti è implementato come lista di ID ( UserId
), niente di più. Quindi ora UserEventView
prende questo elenco e vuole creare istanze di UserView
per visualizzare informazioni più dettagliate sugli utenti (ad esempio come elenco di nomi). Quindi ora UserEventView
deve accedere a Users
per tradurre UserId
in User
per fornire dati corretti di UserView
. Quindi, qual è il modo migliore per UserEventView
di accedere a Users
?
Posso vedere diversi modi su come risolverlo, ma nessuno sembra essere l'ideale:
-
Singleton
- il modo più semplice e più semplice. Qualunque sia ilSystem
(anche seUserEvenView
non se ne preoccupa) o per ogni singolo modulo. -
Users
istanza è data aUserEventView
dal suo genitore, che è fornito dal suo genitore, che è fornito dal suo genitore, ... - C'è un componente
UsersProvider
collegato aUserView
che cerca la radice della GUI dove cerca un componente che fornisce l'istanzaSystem
e ottieneUsers
da esso.
Note:
- Se vuoi suggerire qualche eccezione nel design per gli utenti, immagina che io lavori con auto, scarpe, qualsiasi cosa.
- L'app è scritta in C # / C ++.