Ver Mensaje Individual
  #6 (permalink)  
Antiguo 11/01/2014, 16:37
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: usar metodo estatico o no?

Que un método "siempre vaya a ser igual", o que use o no variables miembro de una clase, es una consecuencia de que el método sea estático, no la causa.
Un método es estático cuando es un método de clase, no de instancia.
En este caso:
Puedo pedirle a una instancia de newsModel que me dé todas las news que existen en la BD? Es algo que se le pide a una *instancia*, a una cierta noticia?Una noticia puede ser publicada, comentada, desactivada, etc..Pero, que devuelva instancias (o datos de instancias) que no son ella misma?
Puedo pedirle a la clase newsModel que me dé todas las news que existen en la BD? Esto tiene mejor pinta.La clase newsModel no representa a ninguna "news" en particular, y puede hacerse cargo de estas cosas, a falta de una factoría.

Por eso, es muy raro que un método del tipo "getAll-----" necesite variables de instancia.Así he visto que estás derivando modelos de la clase databaseConnection.Aqui hay un error y un comentario:
- El error: la conexión a la bd es una variable miembro *de instancia*.Esto significa que cada instancia, de cada modelo, está abriendo su conexión (!!)..Seguro que no quieres eso.

- El comentario: sé que es una práctica muuuy habitual en ORMs de todo tipo, pero derivar modelos de la clase de DB me parece muy discutible.
Desde el punto de vista de la OOP, es una derivación muy forzada.No tengo tan claro que un objeto News *sea* una conexión a una base de datos (derivación).Ni siquiera que un objeto News *tenga* una conexión a una base de datos (composición).Veo más limpio que un objeto base de datos sepa persistir objetos que deriven de Model.Es decir, el método loadModel() y saveModel() pertenece al objeto "BD", y no a Model (repito, es *mi* punto de vista, sé que en mucha literatura respetable Model deriva de BD).

Y lo que esto significa, es que un objeto "News" es independiente de cómo se *guarda* o se obtiene el objeto.Supón que tuvieras que crear objetos News a partir de un XML, o un json.O, más habitual, que tengas una conexión de lectura (esclavo sql), y otras de escritura (maestro sql). O modelos almacenados en distintas bases de datos.

Esto, en el fondo es así a nivel conceptual.Un modelo es un objeto que pertenece al modelo de negocio de la aplicación.Una tabla de la BD es dónde se almacena, aunque también se almacena, incluso al mismo tiempo, en otros sitios, como memcache, una sesión, una variable..Y no por eso las clases Model derivan de Memcache o Session.
A nivel práctico, es muy sencillo de implementar a nivel de modelo.Pero ser independiente del sistema de almacenamiento para operaciones más allá de manipular un simple modelo, la cosa se complica.