Ver Mensaje Individual
  #15 (permalink)  
Antiguo 28/12/2011, 09:39
_Ruben_
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 3 meses
Puntos: 39
Respuesta: planificar clases php para crear blog

Cita:
Iniciado por trevol Ver Mensaje
pues con un método en la clase post. que sea mostrar categoria. Por ejemplo. o editar categoria por ejemplo. Todo sin salir de la clase post.
Por poder puedes gestionarlo todo con una clase pero eso no es correcto, está mal.

Yo podría usar la clase usuario y en ella gestionar todo: post, categorías, datos del usuario, etc etc ¿es correcto tener una sola clase que lo haga todo? Para nada.

Si no es correcto que la clase usuario gestione los post, ¿por qué si lo es que la clase post gestione las categorías?

Si haces un método para mostrar la categoría ¿cómo obtienes todas las categorías? Dirás que leyendo todos los post y obteniendo su categoría. Imaginemos que tienes 10 millones de post en 10 categorías ¿cuanto tardarías en obtenerlas? De la otra forma en lugar de recorrer 10 millones de registros recorres 10, una diferencia importante ¿no? Llegamos a la conclusión de que gestionar las categorías en la clase post no es escalable (definición de escalabilidad). Una solución no escalable es incorrecta.

No se trata de decir "es que yo voy a tener pocos post", si quieres hacer las cosas bien te servirá tanto para pocos post como para millones. No hay que evaluar el mejor caso, sino el peor.

Para que lo veas mejor, te lo pongo con pseudocódigo:
Código:
listaPost = Post->obtenerPosts()
for (i=0; i<listaPost->length; i++)
   listaPost->mostrarCategoria()
Este sería el ejemplo (aproximado, para nada real) para mostrar todas las categorías. Aun tendrías que almacenar las que se muestran para no mostrarlas 2 o más veces.

Código:
listaCategorias = Categorias->obtenerCategorías()
for (i=0; i<listaCategorias->length; i++)
   listaCategorias->mostrarCategoria()
Este haría lo mismo pero teniendo clase categoría, en este no tendrías que llevar un control de las que muestras o no.

¿Para que quieres mostrar todas las categorías? Puede que te interese mostrarlas para que el visitante de la web haga clic en una de ellas para leer solo los post de esa categoría.

Claro que podrías crear un método que devolviese solo las categorías sin repetirse. Bien, ¿cómo sería esa sentencia SQL? Algo así:
Código:
SELECT DISTINCT categoria FROM post
Vamos a evaluarla, si tienes 10 millones de post se comprobarán los 10 millones de registro en base de datos, cuantos más post más lenta será la sentencia.
Código:
SELECT categoria FROM categorias
Si tienes 10 categorías las devuelves todas, si tienes 100 también, al final las vas a tener que recuperar todas. Pero el número de post no afecta a la velocidad de la sentencia.

Claro que puedes hacer que el método de la clase post ejecute la segunda y no la primera porque si tienes la tabla categorías, bueno, entonces según evolucione y sea más complejo tu diseño de clases porque añades más cosas, acabarás viendo por ti mismo que es mejor separar post de categorías porque esa clase se esta volviendo muy grande y pesada. Pero entonces como ya tendrás todo tu código hecho de esa forma cambiarlo para incluir esa clase te llevará mucho tiempo, y al final optarás por seguir gestionando categorías en la clase post (porque te costaría mucho cambiarlo) aunque ya te hayas dado cuenta de que es mejor separar post de categorías.