Suddivisione del codice dalle operazioni di modulo in C #

3

Ho un progetto di grandi dimensioni (almeno per me - circa 10k linee) scritto in C #. Ho un oggetto treeview sulla sinistra del mio modulo e ho molti nodi sulla mia vista ad albero. Quando clicco su un nodo, faccio apparire un pannello sul lato destro del modulo. Dato che eseguo solo operazioni con elementi grafici (riempiendo caselle di testo, facendo clic sui pulsanti, mostrando immagini su picturebox ecc.), Scrivo tutto il mio codice nella classe MainForm. Questo sembra non molto buono, ma dall'altra parte, penso di dover scrivere in classe MainForm perché tutto il mio lavoro è di valutare gli elementi del modulo sui pannelli. Cosa devo fare per scrivere un codice più portatile o comprensibile? Devo scrivere in classe MainForm o ho alcune opzioni o metodi da implementare?

    
posta sanchop22 14.06.2012 - 21:52
fonte

4 risposte

8

Le classi della GUI possono diventare rapidamente una palla di fango se non vengono gestite con attenzione. Il semplice refactoring farà il trucco. Alcuni suggerimenti:

  1. Spingi tutto ciò che non è direttamente correlato alla GUI in classi separate.
  2. Rif. il più possibile il codice rimanente dai gestori di eventi nei propri metodi.
  3. Utilizza #regions per separare i gestori di eventi dal resto del codice e per suddividere il resto del codice in aree funzionali.
  4. Incapsula il comportamento personalizzato mediante i controlli di sottoclasse
risposta data 14.06.2012 - 22:31
fonte
3

Questo tipo di codice sarebbe molto più facile da gestire se, ad esempio, invece di avere tutto il comportamento di personalizzazione di una vista ad albero nel MainForm, in realtà avevi una classe che estendeva TreeView e ti ha fatto tutta la personalizzazione lì, e il tuo MainForm lo ha appena usato.

Dovresti farlo per ogni controllo esistente nella tua finestra (o canvas).

    
risposta data 14.06.2012 - 22:26
fonte
2

Questo è qualcosa che imparerai solo scrivendo sempre più codice. Un file di linea 10k è gigantesco e probabilmente hai un sacco di codice che può essere diviso. Il problema è che se inizialmente non affrontassi il problema con piani per separare le preoccupazioni, le cose potrebbero essere così mescolate ora che richiederebbe essenzialmente una riscrittura completa.

Detto questo, a 10k linee, il programma è "completo"? O qualcuno lo manterrà? Se si trattava di una piccola utility, allora potrebbe essere meglio andarsene così com'è. D'altra parte, se questo è qualcosa che devi mantenere, probabilmente trarrai benefici da un intenso refactoring.

Non conoscendo il tuo dominio questo rende difficile, ma qui ci sono alcuni modelli di moduli comuni che potrebbero essere applicabili:

  • separa il livello dati
  • decompone il modulo in UserControls per contenere parti di esso
  • crea classi di servizio che fungono da aiutanti per incapsulare calcoli
risposta data 14.06.2012 - 22:16
fonte
2

Immagino che tu non abbia solo operazioni GUI (o almeno non solo operazioni che devono essere programmate in questo modo): la tua visualizzazione ad albero mostra alcuni dati , e in i tuoi pannelli hai anche molti dati . Potresti aver usato (o abusato) solo gli elementi della GUI come contenitori per questo, ma questo non è il modo in cui deve (o dovrebbe) essere organizzato. Suggerisco di iniziare a separare le parti dipendenti dalla GUI dai dati. Quindi probabilmente identificheresti operazioni indipendenti dalla GUI che puoi separare dal tuo modulo principale.

    
risposta data 14.06.2012 - 22:49
fonte

Leggi altre domande sui tag