Come strutturare le classi nel filesystem?

0

Ho alcune classi (vista).

Tabella, Albero, PagingColumn, SelectionColumn, SparkLineColumn, TimeColumn.

al momento sono piatti sotto app/view come questo:

app/view/Table
app/view/Tree
app/view/PagingColumn
...

Ho pensato di ristrutturarlo, perché gli alberi e le tabelle usano le colonne, ma ci sono alcune colonne, che funzionano solo su un albero, alcune che lavorano sugli alberi e sui tavoli e in futuro ci sono probabilmente alcune che lavorano solo in tavoli, non lo so.

La mia prima idea era questa:

app/view/Table
app/view/Tree

app/view/column/PagingColumn
app/view/column/SelectionColumn
app/view/column/SparkLineColumn
app/view/column/TimeColumn

Ma dal momento che SelectionColumn è esplicitamente per gli alberi, ho il timore che i futuri sviluppatori possano avere l'idea di utilizzarli per ignorarli.

Ma come ristrutturarlo probabilmente?

In questo modo:

app/view/table/panel/Table

app/view/tree/panel/Tree
app/view/tree/column/PagingColumn
app/view/tree/column/SelectionColumn

app/view/column/SparkLineColumn
app/view/column/TimeColumn

O come questo:

app/view/Table
app/view/Tree

app/view/column/SparkLineColumn
app/view/column/TimeColumn

app/view/column/tree/PagingColumn
app/view/column/tree/SelectionColumn
    
posta K.. 29.11.2012 - 13:44
fonte

2 risposte

1

Senza entrare troppo nei dettagli relativi al tuo scenario specifico, qui ci sono un paio di linee guida durante la strutturazione delle classi.

  • Di solito la tua struttura di file dovrebbe seguire gli spazi dei nomi delle tue classi , quindi questa domanda non si riferisce tanto alla struttura del file come sembra, ma piuttosto a come organizzare le classi e creando le astrazioni appropriate.
  • Posiziona le classi nel spazio dei nomi meno specifico possibile . Quando hai creato una classe per una certa classe all'interno di uno spazio dei nomi specifico, questo non significa necessariamente che sia il posto più logico in cui collocarlo. Potrebbe essere importante posizionarlo più in alto nella gerarchia.
  • Durante la creazione di astrazioni corrette, le classi diventano riutilizzabili in un'ampia serie di scenari e lo spazio dei nomi dovrebbe riflettere ciò. Invece di posizionare una classe in uno spazio dei nomi di un'applicazione specifico, puoi spostarla ad es. uno spazio dei nomi di controllo utente comune.
  • Seguendo il principio di coesione , colloca le classi correlate logicamente . Per esempio. quando un insieme di classi sono correlate logicamente, potrebbe essere utile creare uno spazio dei nomi specifico e raggrupparli insieme in questo spazio dei nomi.

Applicando questo al tuo scenario specifico, la prima cosa che ti viene in mente è:

  • Comune / layout / colonne / AbstractColumn
  • Comune / layout / colonne / PagingColumn
  • Comune / layout / colonne / SparkLineColumn
  • Comune / layout / colonne / TimeColumn
  • Comune / Layout / Tabella
  • Comune / Layout / albero
  • Comune / Layout / Albero / SelezioneColonna (potrebbe essere una classe interna)
risposta data 29.11.2012 - 15:17
fonte
1

Suggerirei la tua prima idea, con l'aggiunta di una ulteriore classe parziale "BaseColumn" dalle varie classi di colonne. Ciò consentirebbe di definire i metodi e le proprietà comuni all'interno di "BaseColumn" e di implementare le differenze nelle classi di colonne Paging, Selection, Spark e Time.

    
risposta data 29.11.2012 - 15:17
fonte

Leggi altre domande sui tag