C'è qualcosa di sbagliato in questo schema ? È solo questione di scelta personale se lo stato di una classe viene tenuto nei campi e nelle proprietà o passato tra i metodi statici utilizzando gli argomenti?
Parlando della mia esperienza personale, ho lavorato su 100 applicazioni Kloc che hanno hiearchies oggetto molto molto profonde, tutto eredita e ignora tutto il resto, tutto quello che implementa una mezza dozzina di interfacce, anche le interfacce ereditano una mezza dozzina interfacce, il sistema implementa ogni modello di progettazione nel libro, ecc.
Risultato finale: un'architettura veramente OOP-tastica con così tanti livelli di riferimento indiretto che occorrono ore per eseguire il debug di tutto. Recentemente ho iniziato un lavoro con un sistema come questo, dove la curva di apprendimento mi è stata descritta come "un muro di mattoni, seguito da una montagna".
A volte l'OOP troppo zelante risulta in classi così granulari da essere in realtà un danno netto.
Al contrario, molti linguaggi di programmazione funzionale, anche quelli OO come F # e OCaml (e C#!), Incoraggiano l'hiearching piatto e superficiale. Biblioteche in queste lingue tendono ad avere le seguenti proprietà:
- maggior parte degli oggetti sono pocos, o hanno al massimo uno o due livelli di ereditarietà, dove gli oggetti non sono molto di più di contenitori per i dati logicamente correlati.
- Invece di classi che chiamano l'una nell'altra, si hanno moduli (equivalenti a classi statiche) che controllano le interazioni tra gli oggetti.
- I moduli tendono ad agire su un numero molto limitato di tipi di dati, e quindi hanno un ambito ristretto. Ad esempio, il modulo Lista OCaml rappresenta operazioni su elenchi, un modulo Cliente facilita le operazioni sui clienti. Sebbene i moduli abbiano più o meno le stesse funzionalità dei metodi di istanza di una classe, la differenza fondamentale con le librerie basate su moduli è che i moduli sono molto più indipendenti, molto meno granulari e tendono ad avere poche o eventuali dipendenze da altri moduli.
- Di solito non è necessario creare una sottoclasse di metodi di override degli oggetti poiché è possibile passare le funzioni come oggetti di prima classe per la specializzazione.
- Sebbene C# non supporti questa funzionalità, functors fornisce un mezzo per creare una sottoclasse di moduli specializzati.
maggior parte delle grandi librerie tendono ad essere più largo che profondo, ad esempio l'API Win32, librerie PHP, BIFs Erlang, librerie OCaml e Haskell, stored procedure in un database, ecc Quindi questo stile di programmazione è il test di battaglia e sembra funzionare bene nel mondo reale.
A mio parere, le API basate su modulo più progettate tendono a essere più facili da utilizzare rispetto alle API OOP meglio progettate. Tuttavia, lo stile di codifica è altrettanto importante nella progettazione dell'API, quindi se tutti gli altri membri del team utilizzano OOP e qualcuno si disconnette e implementa qualcosa in uno stile completamente diverso, probabilmente dovresti chiedere una riscrittura più simile alla codifica dei team standard.
correlati http://stackoverflow.com/questions/790281/ –
Anche http://stackoverflow.com/questions/2410584/is-it-ok-to-wind-up-using-mostly-static-classes/ 2410849 # 2410849 – ewernli
Dopo la modifica, direi di sì, sicuramente dovrebbe essere una classe istanziata perché stai mantenendo lo stato (il foglio di calcolo di Excel), quindi avrei una classe che prende il set di risultati nel costruttore e un'altra metodo come "Salva (stringa nome file)" o "Salva (foglio di lavoro Excel)" per creare il foglio di calcolo Excel. Tutti gli altri metodi che indovinerei sono metodi di supporto e dovrebbero essere privati. –