He intentado durante mucho tiempo entender cómo funciona la OOP. Veo sus ventajas. He leído muchos tutoriales y he visto la misma cantidad de videos sobre el tema. Obtengo los ejemplos de animales / gatos / perros, obtengo los ejemplos de automóviles / unidades. Con lo que estoy luchando es cómo aplicar estos conceptos en una aplicación del mundo real. Entonces, me propuse construir uno usando OOP.
No estoy pidiendo ayuda con la sintaxis o escribiendo código específico. Puedo encontrarlo en la documentación y buscando en foros, etc. Lo que realmente necesito es orientación y un empujón en la dirección correcta de vez en cuando. ¿Hay algún programador experimentado dispuesto a guiarme?
Como mi proyecto de aprendizaje, me gustaría construir una "aplicación web" de clasificados simples. Algo similar a Craigslist pero muy diluido en términos de alcance. Me gustaría usar PHP5 y MySQL, porque estoy familiarizado con ellos.
Digamos que solo hay estos 2 casos de uso:
- Publicar algo para la venta
- Navegar / buscar algo para comprar
¿Qué "cosas" deberían ser objetos? Me imagino que cada elemento podría ser un objeto, pero ¿en qué punto? ¿Y por qué?
Entonces, por ejemplo, el usuario completa el formulario "publicar artículo en venta", ¿debería ese formulario convertirse en un objeto que se pasa a otro objeto que inserta los valores en una base de datos?
¿Qué pasa cuando otro usuario está navegando y solicita ver todos los elementos de la categoría C? ¿Tiene sentido que cada vez que la aplicación tiene que conectarse a su base de datos crea un objeto de base de datos y luego obtiene un montón de objetos de elementos y los muestra en la página? ... escribir esto ciertamente me hace darme cuenta de lo despistado que todavía estoy sobre la POO. Por favor, ayúdame a arreglar eso.
Si, en su opinión, este no es un buen proyecto para comenzar a meterse en OOP, ¡no dude en sugerir otra idea!
fuente
Respuestas:
Sinceramente, creo que el consejo aquí ha sido terrible para los nuevos estudiantes de OO hasta ahora. No es una buena idea comenzar a pensar de inmediato en los objetos como representaciones de una instancia específica de una "cosa" definida por alguna clase. Es mejor pensar en ellos como componentes compartimentados de una máquina que tienen alguna interacción entre ellos, pero no los componentes internos de los demás. Cada uno de estos componentes mantiene el estado
Si desea utilizar un ORM (mapeo relacional de objetos) para las interacciones de DB, cualquier marco que use o cree probablemente tendrá algunos objetos superficiales que representan tablas, que probablemente sean colecciones de "cosas", pero personalmente no me gustan los ORM , y no creo que necesariamente representen prácticas ideales de OO, pero son populares para grandes aplicaciones web.
Además de eso, probablemente tendrá algunos componentes importantes que la máquina de aplicaciones web necesita para ejecutar, como una o más conexiones de base de datos (puede crear una clase que mantenga una conexión y puede ejecutar consultas preparadas desde -
PDO
es genial por sí mismo , pero lo envolvería), y quizás un sistema de plantillas para sus vistas. Es posible que también desee que sus controladores sean objetos PHP. Si tiene que completar un formulario, puede tener un objeto que mantenga los valores del formulario para P / R / G, un token de protección CSRF, y pueda realizar la validación en sus entradas.No debe intentar buscar "cosas" para convertirlas en objetos al construir el diseño de su aplicación web y el gráfico de objetos. En cambio, debe pensar en los componentes lógicos que se unen para crearlo. No creo que deba intentar forzar esto, y debería ser bastante natural, pero es muy difícil hacerlo correctamente y definitivamente tendrá que cambiar algunas decisiones de diseño en el camino.
Mi consejo final es este: la composición sobre la herencia es el camino a seguir.
fuente
Así es como puede usar OOP para comprar y vender sus mascotas, la misma metodología podría usarse para vender autos o aviones; p
fuente
A petición de OP, compartiré el código de mi libro de visitas.
Clase de mensaje:
Clase de objeto de acceso a datos de mensaje:
index.php
Cambié el nombre de algunas de las variables y funciones para que tengan sentido (traducido del holandés al inglés: P) para que pueda encontrar algunas sesiones extrañas a veces porque acabo de hacer un reemplazo rápido, etc. Diviértase con eso. Además, este no es todo el código porque eso me daría como resultado publicar un código de 20 archivos: P
fuente
Como se menciona en Explosion Pills, en una aplicación compleja, la mayoría de los objetos están relacionados con componentes de la aplicación (por ejemplo, grupos de conexiones de bases de datos, comandos, estructuras de datos como hashmaps) en lugar de entidades del mundo real (como una tarjeta de embarque, una factura o un archivo mp3) ) Hay muchos buenos libros sobre patrones de diseño que muestran formas en que las personas han resuelto muchos problemas recurrentes en esta área. El libro GOF, como se le conoce, es completo pero muy seco, los patrones de diseño de Head First pueden ser más accesibles.
En términos de análisis y diseño del mundo real. A menudo es útil pensar en términos de sustantivos y verbos. Por ejemplo, una biblioteca de préstamos de video (¿son obsoletos ahora?) Puede tener estos elementos / sustantivos:
En términos de verbos:
Estos se pueden convertir en clases con operaciones (hace mucho tiempo que no hago PHP, así que lo evitaré):
Todo toma MUCHA práctica y jugar. Lo mejor que puede hacer es quedarse atrapado y aprender de los diseños fallidos. En mi opinión, OO es algo que puedes seguir aprendiendo y desarrollando a lo largo de tu vida (no es fácil y no hay soluciones perfectas para nada). El buen diseño es a menudo iterativo, así que espere probar algunas ideas diferentes para su aplicación web "Craig's List".
fuente
Lo mejor que puede hacer es encontrar una manera de concentrarse en el núcleo de su aplicación: "post", "user", "post :: FindByName ()", "user-> Validate ()" etc., y no se preocupe demasiado sobre la plomería: cómo pegar las publicaciones en las tablas de la base de datos, cómo mantener la visualización de una publicación coherente entre las diferentes búsquedas y cómo pegar el formulario "ingresar publicación" en un registro de la base de datos.
Afortunadamente, hay muchos marcos que hacen esto por usted; el paradigma dominante en las aplicaciones web OO es "Model-View-Controller", también conocido como MVC ; en PHP, hay una serie de marcos MVC disponibles que puede usar.
Si bien esto amplía su necesidad de aprender, ahora debe aprender sobre MVC y OO, significa que sus esfuerzos de OO se limitan principalmente a la capa "Modelo", que representa su dominio comercial; ahí es donde OO es más natural y expresivo. La mayoría de los marcos MVC le permiten definir su capa de "modelo" y luego crear automáticamente un sitio web en torno a eso utilizando una técnica conocida como andamiaje; de esa manera, obtiene una forma rápida de experimentar con diferentes implementaciones para su modelo de dominio, sin tener que quitar toda la fontanería.
fuente