Foros del Web » Programando para Internet » PHP »

POO, problema conceptual, require_once

Estas en el tema de POO, problema conceptual, require_once en el foro de PHP en Foros del Web. Hola amigos, tengo una duda sencilla pero no la puedo ver claramente. La cosa es asi: Dentro de un proyecto de una escuela, tengo una ...
  #1 (permalink)  
Antiguo 01/09/2018, 10:08
 
Fecha de Ingreso: noviembre-2008
Mensajes: 283
Antigüedad: 10 años, 1 mes
Puntos: 2
POO, problema conceptual, require_once

Hola amigos,
tengo una duda sencilla pero no la puedo ver claramente.
La cosa es asi:
Dentro de un proyecto de una escuela,
tengo una tabla de cursos y otra de cursos_alumnos.
Dos clases distintas se encargan del manejo particular de cada tabla.

Una pantalla permitirá a un administrador, habilitar o eliminar cursos (claro, siempre que no tenga ya alumnos asignados)

El tema es que no se bien, cual es el lugar de buen diseño,
cuando trabajo con alta/baja de cursos
donde colocar el parrafo de control que me trae la cantidad de alumnos en los cursos.
Porque si hago require a la clase de alumnos,
es muy factible que en algún momento, tenga problemas por referencias cruzadas que provocarán un loop, si la parte de alumnos, en algún momento necesite hacer también un require a cursos para alguna funcionalidad X.

Bueno, no se si me he explicado bien. Espero me entiendan.
  #2 (permalink)  
Antiguo 02/09/2018, 21:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.982
Antigüedad: 5 años, 5 meses
Puntos: 376
Respuesta: POO, problema conceptual, require_once

Tu problema creo que es porque estas pensando en termino de tablas en lugar de objetos.
Como objeto la clase o metería puede requerir a alumnos sin ningún problema para determinar si tiene o no alumnos asignados y no debes de tener "referencias cruzadas" aun cuando requieras a la clase Alumno ya que solo vas a consultar en esa clase.
Espero ayudarte y si no, explicar mejor cual es el problema pero yo creo que facilmente puede hacer algo como:
Código PHP:
Ver original
  1. if ($subject->hasNoStudents()) {
  2.     $subject->eliminate();
  3. }
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 10/09/2018, 23:16
 
Fecha de Ingreso: noviembre-2008
Mensajes: 283
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: POO, problema conceptual, require_once

Gracias por responder hhs, y perdón mi demora.
Creo que has dado en el clavo.
Mentalmente pienso simultaneamente en los conceptos de tablas, acciones, lógica y objetos.
Y como bien dices, hay que pensar solo en objetos.

Así, un objeto puede requerir a otro para hacer alguna consulta,
pero solo él mísmo debe tomar acciones sobre su propio contenido.

Y ahora, continuando el mismo planteo,
si un objeto es demasiado grande en cuanto a su lógica,
y opto por separarlo en objetos más pequeños,
¿está bien que estos extiendan de él ?
Dado que este objeto si es una tabla,
ahora es cuando es cierto que me confunde un poco y me suena raro
crear y usar dentro de una clase objetos que extiendan de ella mísma y que todos escriben la misma tabla.

¿cuál sería el camino correcto al trabajar con una clase que es una tabla, para separar lógica y funcionalidad en distintos objetos?
en este caso, ¿las clases hijas pueden extender de su padre para aprovechar funcionalidad?
¿las clases hijas deberían escribir la tabla?
Es aquí cuando pienso en los require mutuos y siento la presencia de un loop infinito.

Bueno, gracias por la claridad que puedas aportarme. :D
  #4 (permalink)  
Antiguo 11/09/2018, 12:14
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 12 años, 7 meses
Puntos: 18
Respuesta: POO, problema conceptual, require_once

PHP no soport la Multiherencia, ahora si quieres dividir la logica de una clase en muchos archivos, por que puede volverese increiblemente grande, trata de usar TRAITS, clases Globales, funciones globales, y los requiere siempre en el encabezado, PHP tiene algunas funciones de AUTOCARGA(Autoload)

asi no tienes que lidiar con los REQUIRE, si tienes tus archivos, bien organizados.
  #5 (permalink)  
Antiguo 11/09/2018, 18:02
 
Fecha de Ingreso: noviembre-2008
Mensajes: 283
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: POO, problema conceptual, require_once

Gracias tuadmin por tu aporte. No conocía de esa técnica.
Estuve googleando un poco, suena muy práctica. Gracias!
  #6 (permalink)  
Antiguo 12/09/2018, 12:37
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.982
Antigüedad: 5 años, 5 meses
Puntos: 376
Respuesta: POO, problema conceptual, require_once

Cita:
Y ahora, continuando el mismo planteo,
si un objeto es demasiado grande en cuanto a su lógica,
y opto por separarlo en objetos más pequeños,
¿está bien que estos extiendan de él ?
Dado que este objeto si es una tabla,
ahora es cuando es cierto que me confunde un poco y me suena raro
crear y usar dentro de una clase objetos que extiendan de ella mísma y que todos escriben la misma tabla.
El detalle es que la herencia no es la única forma de hacer algo, existen otras opciones pero creo que en este punto necesitas proporcionar mas información. Porque si no solo vamos a estar suponiendo cosas y lo que necesitas si quieres que alguien te pueda ayudar es mostrar el caso real, de esa forma te ahorras tiempo tú mismo y quien te puede contestar.

Cita:
¿cuál sería el camino correcto al trabajar con una clase que es una tabla, para separar lógica y funcionalidad en distintos objetos?
en este caso, ¿las clases hijas pueden extender de su padre para aprovechar funcionalidad?
¿las clases hijas deberían escribir la tabla?
Es aquí cuando pienso en los require mutuos y siento la presencia de un loop infinito.
Ya lo mencione la herencia no siempre es la solución.
Por otro lado si tienes tus clases en archivos separados y ya sea que uses require o require_once no debiera de existir un "loop". Por otro lado averiguar si pasa o no, te toma solo unos minutos con una prueba.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.



La zona horaria es GMT -6. Ahora son las 02:14.