Pratica corretta sulla gestione di un gran numero di oggetti in semplici programmi OOP [duplicato]

1

(Si prega di scusare il livello di semplicità in questa domanda, in quanto è molto semplice)

Ho lavorato con programmi orientati agli oggetti molto semplici e ho imparato concetti di base. Ad esempio, i miei programmi avrebbero solo uno o due oggetti, ognuno assegnato ad una variabile.

TStudent student1 = new TStudent();
TStudent student2 = new TStudent();

Come puoi vedere nel programma sopra, ho due semplici variabili (student1 e student2). Ogni variabile memorizza un oggetto di tipo TStudent.

La mia domanda è, e se avessi 1000 studenti, ognuno con un FName, una SName, un indirizzo, ecc. Continuerò e creerò 1000 variabili? E i dati relativi alle proprietà di questi oggetti (come il loro FName, SName, Indirizzo, ecc.) Saranno archiviati in un database?

Spero che abbia senso, e mi scuso per la sua semplicità. grazie.

    
posta user3396486 19.09.2016 - 15:44
fonte

2 risposte

1

Penserei che a quel punto potresti metterli in una lista o in un array o qualsiasi tipo di raccolta. Memorizzando nel database? Certo, se hai bisogno ... da dove vengono le informazioni? Del resto, quanto spesso dovresti avere tutti questi oggetti caricati in memoria nello stesso momento?

Considera questo:

var students = new List<Student>();
someDataSource.FillStudentList(students);
// students now has 1000 student objects inside it
// wat do?

o

var students = new List<Student>();
students.Add(new Student() { Name = "John Smith" };
students.Add(new Student() { Name = "Mary Smith" };
students.Add(new Student() { Name = "John Doe" };
/// x1000

In quale scenario ti aspetti di caricare "manualmente" i dati in quel modo? Ti aspetti che venga dall'interfaccia utente? Forse da un caricamento di file? Che cosa hai bisogno di fare dopo?

Immagino che il punto sia che ci sono davvero molti modi per gestirlo e se esso viene memorizzato o meno in un database è davvero all'altezza dei requisiti dell'applicazione. La maggior parte delle volte, qualcosa di simile verrebbe effettivamente memorizzato in un database, dopo il quale si recupererebbero i dati in un oggetto solo come richiesto dall'applicazione.

Altre volte, potresti caricare un file di dire 100k persone e elaborarle di conseguenza, quindi c'è una ragione ragionevole per gestire anche una quantità maggiore di oggetti.

Questo aiuta a mettere le cose in una prospettiva?

    
risposta data 19.09.2016 - 15:50
fonte
0

Hai ragione, ci sono modi più avanzati per gestire più oggetti.

TStudent student1 = new TStudent();

Questa linea di codice sta facendo due cose. Sta costruendo un oggetto e contiene un riferimento ad esso. Non devi fare queste due cose insieme. Non è necessario digitarli ogni volta che ne vuoi fare uno diverso.

Ci sono schemi di creazione che aiutano con la parte di costruzione. È una buona idea non mescolare la costruzione con il comportamento. Al di là dei pattern creativi di GoF c'è il costruttore di Joshua Bloch che ha hackerato i parametri in un linguaggio che non li ha. Questo arriva fino alla scrittura di iDSL per costruire i tuoi oggetti. In pratica puoi scrivere la tua lingua per costruire i tuoi oggetti.

Come per mantenere un riferimento, possiamo fare meglio di un semplice identificatore. Il lavoro di Array quando sai in anticipo esattamente quanti ce ne saranno, ma la maggior parte delle persone passa direttamente a collezioni che possono crescere di dimensioni in qualsiasi momento.

Sono disponibili in moltissimi gusti. In Java ho trovato che questo è un modo molto pratico per decidere quale usare:

Ciòchelatualineanonmostraècomeottienileinformazionideglistudentinell'oggetto.

Puòproveniredamoltefonti,DB,fileflat,altrioggetti,moduliWeb,inputdarigadicomando.Perquestomotivoèunabuonaideanonrenderloillavorodeglioggettistudenteperottenerequestoinput.Moltomeglioperavereunasempliceclassedistudenticheèinattesadiqualcosaperconsegnareidati.Quindiscriviuncodicedicostruzioneperciascunodiqueicasichegliconsegnaidati.

Sichiama iniezione di dipendenza e puoi farlo senza alcun software speciale.

    
risposta data 19.09.2016 - 16:58
fonte

Leggi altre domande sui tag