2010-09-23 6 views
7

Sono sempre più consapevole del fatto che il mio codice in un singolo file può spesso estendersi su centinaia di righe abbastanza facilmente e sebbene so che l'implementazione potrebbe essere valida, risulta ancora disordinata e disorganizzata.Come organizzare file di grandi dimensioni?

Capisco che ci sono situazioni in cui un sacco di codice è necessario, ma qual è il modo migliore per organizzare tutto?

Ho pensato di separare le variabili dai metodi, private s da public s e internals ma io non voglio, perché non posso impedirmi di pensare che i componenti di una classe di appartenenza in un unico file.

Questa cosa è aggravata quando sto lavorando con il codebehind di una finestra WPF, che sembra sempre crescere ad un tasso esponenziale in un enorme casino molto rapidamente.

Inoltre: C# ha una parola chiave denominata partial, che consente di dividere una classe su un numero qualsiasi di file senza influire sulla funzionalità. Tuttavia, ho notato che Microsoft sembra solo utilizzare partial per nascondere il codice generato da te (Winforms/WPF.) Che mi porta a chiedermi se dividere una classe semplicemente perché ha molte linee è un uso legittimo di partial - vero?

Grazie

+3

Se è possibile dividere una classe in diversi file 'parziali' che sono logicamente separati, perhpas è necessario suddividere la classe in più classi. Potresti avere troppe responsabilità in un unico posto. – Oded

+2

Utilizzare solo parziali per classi generate partialmente. –

risposta

13

Separa il codice in responsabilità. Per ogni responsabilità, definire un singolo tipo. Cioè, seguire lo Single Responsibility Principal. Facendolo si otterranno unità di codice più piccole, ognuna delle quali svolge una funzione molto specifica. Ciò non si traduce solo in file più piccoli, ma anche in una migliore progettazione e manutenibilità.

+0

Come si applica a una classe code-behind WPF? – Gabe

+0

@Gabe: la maggior parte (spesso, tutte) della funzionalità di una vista si trova in uno o più modelli di visualizzazione. Seguire SRP implica che ogni VM ha una singola responsabilità, piuttosto che perdere tutto ciò che è correlato alla vista in una VM. Detto questo, a volte è OK avere codice nel code-behind, se è strettamente correlato alla vista (non alla logica aziendale) e non è condiviso da altre viste (non da un componente o comportamento condiviso). In tal caso, SRP è ancora sostenuto perché la responsabilità è "manifestare la vista", per così dire. –

2

Tendo a raggruppare proprietà, costruttori, metodi e metodi di supporto (metodi privati) insieme alle regioni. Se ho molti metodi, creo più regioni in base a ciò che fanno (particolarmente utile per i sovraccarichi). E a proposito di sovraccarichi, prova a ridurre il codice con i parametri opzionali.

Per quanto ne so parziale significa che la classe esiste in due file separati. Webform e controlli sono parziali perché l'altra "parte" del file è il file [p | c] x che lo accompagna.

+3

Regioni: basta dire di no;) –

+0

@Kent - non sono così male. Hanno bruciato solo una volta la mia casa. – Oded

+3

L'utilizzo delle regioni nei file di classe è spesso un segno di cattiva OOD ... E non nascondere mai la complessità! Rendilo meno complesso ;-) –

9

Se i file sono grandi perché contengono una singola classe/struttura che è grande, in genere questo è (ma non sempre) un suggerimento che la classe ha a che fare con più problemi e può essere rifatta in un numero minore di classi più specializzate.

1

Vado sulla teoria che se non si riesce a vedere un intero metodo su uno schermo (cioè si deve scorrere), si dovrebbe suddividere il metodo in ulteriori metodi - nella stessa classe o quando il codice verrà utilizzato più di una volta in una classe di supporto.

5

Se ti capisco, il tuo problema principale è che le tue forme finiscono per essere troppo grandi, il che porta alle classi per quelle forme contenenti troppo codice, il che è abbastanza normale se le tue forme non sono molto semplici. Il modo per provare a minimizzare questo è usando User Controls dato che se si spostano i controlli in altre classi, si sposta anche il codice dietro ad altre classi.

A volte può essere un po 'più difficile comunicare tra i controlli, ma di solito è più che compensato dal fatto che il codice di ogni classe sarà molto più facile da capire.

0

Utilizziamo stylecop. Aiuta un po 'perché impone una struttura sul tuo codice e un ordine per ciò che dovrebbe apparire dove. Quindi puoi quindi orientarti in modo più intuitivo su file più grandi.