esta es mi primera pregunta aquí. Espero que alguien pueda ayudar.
Tiene que ver con buenas prácticas de diseño orientado a objetos.
Escribo una aplicación para Android, pero la pregunta es general y se aplicará igualmente a (por ejemplo, una interfaz de usuario dinámica).
Por el bien del argumento, digamos que tengo una clase Estudiante.¿Deberían los objetos dibujarse solos? ¿Cómo? (Estoy usando Android, sin embargo, la pregunta se aplica a todos los idiomas OO)
public class Student {
public int StudentID;
public String firstName;
public String lastName;
}
Hay un principio que se debe pedir raramente un objeto de información sobre sí mismo, sino que debe decirle a ella lo que quiere que haga, y dejar que el objeto hacer el trabajo en sí. Con este fin, tengo los siguientes métodos
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
}
}
Esto es para que otras clases pueden utilizar esta clase sin importar la forma en que persiste es la información.
Descargo de responsabilidad: Sé que no estoy usando accesorios, solo propiedades públicas. Solo trato de mantener este ejemplo simple.
No pregunte cómo una clase externa conocería un StudentID, Eso es irrelavent a la pregunta que quiero hacer, que es esto:
(Say) Quiero dibujar una tabla de estudiantes y sus detalles en la pantalla. Desde la clase UI (Say a ListActivity en android) pude obtener una variedad de estudiantes, luego recorrerlos, estableciendo las propiedades de mi ListView sobre la marcha. El problema que tengo con eso es que parece que estoy pensando demasiado en el procedimiento, y no en el verdadero espíritu del diseño orientado a objetos. También requiere preguntarle a cada estudiante sobre sí mismo, violando la encapsulación.
Aparentemente (por lo que leí) el alumno debería dibujar solo.
Aquí es donde me confundo. ¿Cómo puede un alumno dibujarse cuando no sabe nada de la IU? ¿Paso una referencia a la IU al objeto del alumno? ¿Rompe esto la separación de las capas de presentación y negocio o no? ¿Qué se considera una buena práctica? ¿Hay algún artículo o patrón de diseño por ahí, preferiblemente con código de ejemplo, porque no pude encontrar ninguno? ¿Me estoy preocupando por algo no tan importante y debería ir con mi primera idea desordenada?
Realmente agradecería cualquier entrada, ya que claramente este es un problema que volverá a ocurrir con cualquier cosa que codifique.
Otra posibilidad que consideré fue acceder a la base de datos directamente desde la interfaz de usuario y vincularla a un cursor, pero eso simplemente parece incorrecto. ¿O es eso?
[Model View View Model] (http://en.wikipedia.org/wiki/Model_View_ViewModel) es algo bueno de leer.Los conceptos (creo) Implican vistas que se actualizan automáticamente cuando cambian los datos subyacentes (el modelo). Así que, básicamente, divídelo en 'StudentView' y' StudentModel' – Raynos