elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Resuelto] Ayuda con separar clases relacionadas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] Ayuda con separar clases relacionadas  (Leído 1,726 veces)
Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
[Resuelto] Ayuda con separar clases relacionadas
« en: 3 Abril 2015, 18:00 pm »

Buenas,

Siempre me ha ocurrido que he empezado un proyecto pequeño, y poco a poco le iba añadiendo funciones al mismo archivo... y construía archivos monstruosos. He buscado mucho sobre MVC y POO, pero estoy algo pillado, seguro que ustedes pueden darme el empujón que necesito. Les pongo un ejemplo:

Proyecto de Tienda con un "Modulo" de Productos, otro de Pedidos, otro de Loquesea.
index.php
-> carga un archivo moduloNombreModulo.php dependiendo de la petición.
moduloNombreModulo.php
-> Este se encarga de cargar una classModulo.php y a base de if y elseif recoge las variables introducidas por el usuario, las limpia, y llama a la funcíon correspondiente dentro de la clase.
Digamos que es mi particular controller, pero no es una clase.
classModulo.php
-> Aqui encontramos funciones como addProducto, editProducto... addCategoria, editCategoria... addProveedor, editProveedor..
Cada función dentro de esta clase, realiza las comprobaciones correspondientes a los datos que le pasa desde moduloNombreModulo.php y si esta todo correcto hace lo que deba a través de otra clase encargada de ejecutar consultas a la DB etc.

Después de todo esto, desde moduloNombreModulo.php se ejecuta una función para manejar plantillas, ya que el contenido de vistas esta separado en otra carpeta.

El primer problema que vi es que se va agrandando demasiado la clase, pensé en separar en otras clases mas pequeñas, pero por ejemplo al añadir un Producto, addProducto comprueba si existen las categorias, proveedores, etc. y se reutilizan así funciones compartidas, ya que estas comprobaciones aparecen en casi todas.

Pero ahora me encuentro otro problema más, y es que al crear un modulo de Pedidos (ejemplo), éste necesita de funciones de la clase del otro módulo, como verificar si existe un producto, categoría, añadir un producto en algunos casos desde ese módulo, etc.

Lo que no quiero es tener que incluir e instanciar 4 o 5 clases en cada función dentro de otra clase, no se si a lo mejor estoy yo equivocado y esa es la forma correcta.

Como pensais que debería hacerlo?
Gracias!


« Última modificación: 5 Abril 2015, 16:49 pm por Alex_bro » En línea

EFEX


Desconectado Desconectado

Mensajes: 1.171


"Dinero Facil"


Ver Perfil WWW
Re: Ayuda con separar clases relacionadas
« Respuesta #1 en: 4 Abril 2015, 00:26 am »

No se como llevaras el codigo.. pero sobre lo que explicaste necesitas aplicar Herencia, extender la clase, quizas aplicar el diseño de pratón Factory , asi instaciar las demas clases a una clase padre..

Lo que no entiendo por que desde modulo Pedidos necesitar crear un Producto? y lo de verificar si hay stock podria ser propio de Pedidos.

Si expones codigo, hacelo resumido y vemos, haber si otros quieran meterse, no todos pensamos igual y puede aplicarse diferentes ideas :).


En línea

Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
Re: Ayuda con separar clases relacionadas
« Respuesta #2 en: 4 Abril 2015, 00:45 am »

Gracias por contestar.

Llevo toda la tarde intentando rediseñar la estructura del proyecto, pues la verdad es que está algo avanzado, pero bueno mejor hacerlo ahora que no cuando sea demasiado tarde.

Lo de crear un Producto desde Pedidos era un ejemplo, me refería a funciones que son compartidas en las dos clases (o modelos) como por ejemplo el metodo checkExisteProducto() puede ser útil en el módulo (o controller) de Pedidos (para verificar que se inserta uno que exista de verdad) pero también en las páginas de ver y editar Producto (verificar si existe o no ese producto antes de verlo o editarlo). Éste es un ejemplo de unas cuantas funciones que se comparten, y duplicarlas en las distintas clases rompe totalmente el concepto de reusabilidad.

Voy a mirarme lo que me comentas de patrón Factory y te digo.

Gracias de nuevo.
Saludos.

Edito:
Después de ver muchos ejemplos, acabo de darme cuenta de que mi problema era que aplicaba mal el patrón MVC al incluir parte de la lógica en los modelos (lo que yo llamaba classPedidos etc.) y parte de la lógica en los controllers (mis moduloPedidos etc.), lo que me impedia cualquier forma de reutilización.

Estoy reorganizando todo el código desde el principio, es mucho trabajo, pero creo que merece la pena de cara al futuro.

Muchas gracias por la ayuda!
« Última modificación: 5 Abril 2015, 16:49 pm por Alex_bro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con una consulta con tablas relacionadas mysql « 1 2 3 »
Bases de Datos
mark182 22 20,449 Último mensaje 19 Noviembre 2009, 03:15 am
por ^Tifa^
[Ayuda]Crear Tabla Relacionadas
PHP
rolly21102 1 4,547 Último mensaje 2 Febrero 2011, 07:15 am
por zarkiel
[RESUELTO ]Problema invisible en Clases :(
PHP
mokoMonster 0 1,679 Último mensaje 20 Enero 2012, 15:14 pm
por mokoMonster
[Resuelto] Obtener datos de hardware usando clases WMI
.NET (C#, VB.NET, ASP)
Crazy.sx 7 8,813 Último mensaje 8 Enero 2014, 04:42 am
por llFabianfll
[RESUELTO]¿Porque no se muestran los datos? (clases)
Programación C/C++
trioper 5 2,891 Último mensaje 7 Mayo 2017, 00:46 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines