questa la mia prima domanda qui. Spero che qualcuno possa aiutarti.
Si tratta di buone pratiche di progettazione orientate agli oggetti.
Sto scrivendo un'app per Android, ma la domanda è generale e si applicherebbe in modo uguale a (ad es.) Un'interfaccia utente mobile.
Per amor di discussione, dire che ho uno studente di classe.Gli oggetti dovrebbero disegnarsi da soli? Come? (Sto usando Android tuttavia la domanda si applica a tutte le lingue OO)
public class Student {
public int StudentID;
public String firstName;
public String lastName;
}
c'è un principio che si dovrebbe raramente chiedere un oggetto per informazioni su se stesso, piuttosto si dovrebbe indicare cosa si vuole fare, e lasciare che l'oggetto fare il lavoro in sé. A tal fine, ho i seguenti metodi
public class Student {
public int StudentID;
public String firstName;
public String lastName;
// Constructors
public Student() {}
public Student (int StudentID){
populateFromDataBase (StudentID);
}
private void populateFromDataBase (int StudentID){
// Get the data from the database and set the
// values of all the properties of this
}
public void save(){
// Save the values of the properties to db
}
}
Questo è il modo che altre classi possono utilizzare questa classe senza preoccuparsi di come persiste sue informazioni.
Declinazioni di responsabilità: So che non sto usando gli accessor, solo proprietà pubbliche. Sto solo cercando di mantenere questo esempio semplice.
Non chiedere come una classe esterna potrebbe conoscere uno StudentID, Questo è irrelavent alla domanda che voglio porre, che è questo:
(Dire) Voglio disegnare una tabella di studenti e i loro dettagli sullo schermo. Dalla classe UI (Say a ListActivity in Android) potrei ottenere una serie di studenti, quindi collegarli tra loro, impostando le proprietà del mio ListView mentre procedo. Il problema che ho con questo è che mi sembra di pensare troppo proceduralmente, e non nel vero spirito del design orientato agli oggetti. Richiede anche che ogni oggetto studente venga interrogato su se stesso, violando l'incapsulamento.
Apparentemente (da quello che ho letto) lo studente dovrebbe disegnare se stesso.
Ecco dove mi confondo. Come può uno studente disegnarsi da solo quando non sa nulla dell'interfaccia utente? Devo passare un riferimento all'interfaccia utente all'oggetto studente? Questo rompe la separazione tra presentazione e livelli aziendali o no? Che cosa è considerata una buona pratica? Ci sono articoli o schemi di progettazione là fuori, preferibilmente con codice di esempio, perché non sono riuscito a trovarne? Sono preoccupato per qualcosa non così importante e dovrei semplicemente andare con la mia prima idea disordinata?
Apprezzo davvero qualsiasi input, poiché chiaramente questo è un problema che si ripresenterà con qualsiasi cosa io codifichi.
Un'altra possibilità che ho preso in considerazione era l'accesso al database direttamente dall'interfaccia utente e il collegamento a un cursore, ma questo sembra solo sbagliato. o è?
[Model View ViewModel] (http://en.wikipedia.org/wiki/Model_View_ViewModel) è una buona cosa da leggere.I concetti (credo) coinvolgono le visualizzazioni che si aggiornano automaticamente quando i dati sottostanti (il modello) cambiano. Quindi fondamentalmente diviso in un 'StudentView' e' StudentModel' – Raynos