Corretto pratica MVC per una gerarchia di elementi

1

Sto cercando di sviluppare la mia prima applicazione MVC principale e, in quanto tale, sono nuovo a farlo su larga scala. Ho letto tutto quello che posso online e sono costantemente impegnato a rendere il mio codice il più pulito possibile e a non introdurre cattive pratiche. In questo momento, sto iniziando a chiedermi se il mio setup è come sarebbe stato fatto nel mondo reale.

Al momento, ho la mia classe contenitore principale e sottoclassi che possono apparire all'interno.

Supponiamo che la vista sia simile a questa:

-----------------------------------------------------
|                                                   |
|                    Main    |-----------------|    |
|   |------|                 |D |-----------|  |    |
|   |  A   |                 |  |  B  |  C  |  |    |
|   |      |                 |  |     |     |  |    |
|   |------|                 |  |-----------|  |    |
|                            |-----------------|    |
-----------------------------------------------------

Dove Main è il contenitore di visualizzazione principale e all'interno sono gli elementi A, B e C.

Le viste interne possono essere dinamiche, quindi diciamo che abbiamo anche i nostri MVC per A, B e C.

1) È sbagliato che queste classi siano connesse tra loro in questo modo?

     /------A
    /
Main
    \         /-B
     \       /
      \-----D---C

Con questo intendo entrambe le connessioni sono bidirezionali. Per ottenere "A" da B, potrei chiamare qualcosa come this.getD().getMain().getA() dall'oggetto C.

Indica un problema di progettazione se si tratta di una rete in cui le cose possono spostarsi avanti e indietro?

Esiste una cattiva pratica di passare l'oggetto A in modo che la catena non debba essere eseguita?

Questo può presumere che non ci siano valori nulli per il gusto di questo esempio

2) Se quanto sopra non va bene, è irragionevole fare un singleton statico fuori dall'oggetto Main e avere altre classi che lo accedono tramite un getter statico?

Non so se una tale pratica è cattiva o meno se sai che la finestra principale non è mai stata pensata per essere istanziata due volte (e tu gli impedisci di farlo). Un esempio potrebbe essere ottenere A da C, qualcosa come Main.getA() .

Mi scuso se parte di questo è vago. Come ho detto, sono nuovo di questo e non mi piacerebbe altro che tagliare le cattive abitudini. Se c'è qualcosa di sbagliato o giusto su ciò che ho fatto? Se c'è qualcosa di sbagliato, come lo faresti?

    
posta Water 21.02.2015 - 04:09
fonte

1 risposta

2

Solo alcuni pensieri, continua a fare la tua ricerca sulle migliori pratiche. Innanzitutto, rispettare l'incapsulamento ed evitare un accoppiamento stretto tra le viste. Prendi in considerazione l'utilizzo dell'iniezione di dipendenza per iniettare viste interne in viste esterne nella tua gerarchia, o per decorare ecc. A seconda del caso d'uso.

Esiste una ragione funzionale specifica per cui desideri una chiamata concatenabile a due vie tra i componenti della vista? Se vuoi sapere se stai facendo la cosa giusta, chiediti quale sia il caso d'uso. Supponiamo di avere un contatore visibile in A che incrementa / decrementa in base alla modifica dei dati in C. C'è una ragione per A (un controcomando) per sapere qualcosa su C (una sorta di controllo di immissione dei dati)? No.

Per la comunicazione in questo caso, è necessario utilizzare un modello di evento in cui la modifica dei dati in C genera un evento rilevato dal controller, che quindi aggiorna il modello con il nuovo valore del contatore. La variabile modello per il conteggio deve essere associata ai dati al controllo A. Quando l'evento generato da C aggiorna il modello, il controllo del valore di A cambia. C sta informando l'applicazione dei dati usati da A, ma A non ha conoscenza di C, della sua struttura o dei suoi metodi.

La lettura dei pattern in OOP e MVC ti aiuterà.

Domande specifiche come la creazione di un Singleton da Main dipendono molto dalle specifiche della tua app.

    
risposta data 21.02.2015 - 12:05
fonte

Leggi altre domande sui tag