Istanziazione di un insieme di oggetti dalle informazioni nel file

1

Diciamo che ho quattro classi A, B, C, D.

Ciascuna di queste classi contiene un oggetto Tree. Questo oggetto tree deve essere costruito in base alle informazioni memorizzate nei file f_A, f_B, f_C, f_D, rispettivamente per le classi A, B, C, D.

Quindi l'albero della classe A deve essere costruito secondo f_A.

Ora penso che non sia una buona idea per la classe Tree fare l'I / O dei file.

Un'opzione sarebbe che Tree avesse una funzione buildFromString (String s) che prende il contenuto di un file come una stringa e si costruisce da solo.

Ma ancora una volta, non penso che Tree debba eseguire alcuna elaborazione String.

Un'alternativa sarebbe che per ogni classe A, B, C, D abbiamo una Tree Builder Class, che prende un oggetto Tree come parametro, legge il file corrispondente e costruisce l'albero.

Forse un modello di fabbrica sarebbe d'aiuto, ma non vedo come utilizzarlo in questo contesto.

Ma questo introduce molte nuove classi.

Quale sarebbe un modo pulito di costruire alberi dai file soggetti a quale classe vengono istanziati?

    
posta user695652 18.06.2015 - 18:11
fonte

2 risposte

1

La domanda su come "pulire" è avere un generatore generico / deserializzatore / fabbrica che può creare oggetti di classi diverse da descrizioni testuali dipende da quanto è facile farlo nella lingua. In JavaScript è banale, poiché la notazione dell'oggetto JavaScript è incorporata nella lingua. In Java è possibile, ma un po 'più difficile, dal momento che devi andare in giro con la riflessione e il caricamento di classe esplicito. In qualcosa come Ada (penso, correggimi se sbaglio) è difficile da fare.

Quindi, se è meglio andare per il meta-approccio o creare una gerarchia parallela di classi di builder dipende da quanto efficienti, leggibili, mantenibili, ecc. queste alternative sono sulla piattaforma che userete . Non è quasi certamente ideale creare due classi per ogni concetto nel tuo modello, a meno che tu non possa automatizzare il processo, ma a seconda delle circostanze, potrebbe essere il minore di due mali.

    
risposta data 18.06.2015 - 18:26
fonte
1

the whole tree building functionality would go into a superclass, the respective classes would basically just contain the correct filename for the tree to be built from

Non penso che la creazione di sottoclassi solo per l'hardcode di alcuni valori sia una buona idea. A, B, C e D stanno fondamentalmente parlando solo dei valori dello stesso tipo.

In un certo senso, stai cercando un modo per definire valori specifici del singolo tipo che è la super classe (con tutti i file e la gestione della struttura). Come un oggetto letterale.

A seconda della lingua che stai usando, puoi farlo con metodi statici, che in pratica chiamano il costruttore con un valore hardcoded

qualche pseudo codice

TreeThing (String filepath) // constructor
{
    // do the tree stuff, dependign on the file
}

static TreeThing A ()
{
    return new TreeThing("fileA");
}
    
risposta data 18.06.2015 - 20:34
fonte

Leggi altre domande sui tag