Cela fait longtemps que j'essaie d'enrouler ma tête autour de la POO. Je vois ses avantages. J'ai lu de très nombreux tutoriels et regardé un nombre égal de vidéos sur le sujet. Je reçois les exemples animaux / chats / chiens, je reçois les exemples voiture / voiture. Ce qui me pose problème, c'est comment appliquer ces concepts dans une application réelle. J'ai donc décidé d'en créer un à l'aide de la POO.
Je ne demande pas d'aide pour la syntaxe ou l'écriture de code spécifique - je peux le trouver moi-même dans la documentation et en cherchant dans les forums, etc. Y a-t-il des programmeurs chevronnés prêts à me conseiller?
Dans le cadre de mon projet d'apprentissage, je voudrais créer une simple "application web" pour les petites annonces. Quelque chose de similaire à Craigslist, mais de manière diluée en termes de portée. Je voudrais utiliser PHP5 et MySQL, car je les connais bien.
Disons qu'il n'y a que ces 2 cas d'utilisation:
- Publier quelque chose à vendre
- Parcourir / rechercher quelque chose à acheter
Quelles «choses» devraient être des objets? Je peux imaginer que chaque élément pourrait être un objet, mais à quel moment? Et pourquoi?
Ainsi, par exemple, l'utilisateur remplit le formulaire "publier l'article à vendre", ce formulaire doit-il être transformé en un objet qui est transmis à un autre objet qui insère les valeurs dans une base de données?
Qu'en est-il lorsqu'un autre utilisateur navigue et demande à voir tous les éléments de la catégorie C? Est-il logique que chaque fois que l'application doit se connecter à sa base de données, elle crée un objet de base de données, puis obtient un tas d'objets d'élément et les affiche sur la page? … En écrivant ceci, je me rends certainement compte à quel point je suis encore insensible à la POO. S'il vous plaît, aidez-moi à résoudre ce problème.
Si, à votre avis, ce n'est pas un bon projet pour commencer à patauger dans la POO, n'hésitez pas à suggérer une autre idée!
la source
Réponses:
Honnêtement, je pense que les conseils ici ont été terribles pour les nouveaux apprenants OO jusqu'à présent. Ce n'est pas une bonne idée de commencer immédiatement à considérer les objets comme des représentations d'une instance spécifique d'une "chose" définie par une classe. Il vaut mieux les considérer comme des composants compartimentés d'une machine qui ont une certaine interaction les uns avec les autres, mais pas entre eux. Chacun de ces composants maintient l'état
Si vous souhaitez utiliser un ORM (object-relationnel-mapping) pour les interactions de base de données, quel que soit le framework que vous utilisez ou créez aura probablement des objets peu profonds représentant des tables, qui sont probablement des collections de "choses", mais je n'aime pas personnellement les ORM , et je ne pense pas qu'ils représentent nécessairement des pratiques OO idéales, mais ils sont populaires pour les grandes applications Web.
En plus de cela, vous aurez probablement certains composants importants que la machine d'application Web doit exécuter, comme une ou plusieurs connexions DB (vous pouvez créer une classe qui maintient une connexion et vous pouvez exécuter des requêtes préparées à partir de -
PDO
c'est génial en soi) , mais je voudrais conclure), et peut-être un système de modèles pour vos vues. Vous pouvez également souhaiter que vos contrôleurs soient des objets PHP. Si vous avez un formulaire à remplir, vous pouvez avoir un objet qui conserve les valeurs de formulaire pour P / R / G, un jeton de protection CSRF, et peut effectuer une validation sur ses entrées.Vous ne devriez pas essayer de chercher des "choses" à transformer en objets lors de la construction de votre conception d'application Web et de votre graphique d'objet. Au lieu de cela, vous devez penser aux composants logiques qui se réunissent pour le créer. Je ne pense pas que vous devriez essayer de forcer cela, et cela devrait venir assez naturellement, mais c'est très difficile à faire correctement et vous finirez certainement par devoir changer certaines décisions de conception en cours de route.
Mon dernier conseil est le suivant: la composition sur l'héritage est la voie à suivre.
la source
Voici comment vous pouvez utiliser la POO pour acheter et vendre vos animaux de compagnie, la même méthodologie pourrait être utilisée pour vendre des voitures ou des avions; p
la source
Sur demande de l'OP, je partagerai mon code de livre d'or.
Classe de message:
Classe d'objet d'accès aux données de message:
index.php
J'ai renommé certaines variables et fonctions pour vous donner un sens (traduit du néerlandais en anglais: P) afin que vous puissiez parfois trouver des phrases étranges parce que je viens de faire un remplacement rapide, etc. Amusez-vous avec. De plus, ce n'est pas tout le code car cela me ferait publier comme 20 fichiers de code: P
la source
Comme mentionné par Explosion Pills, dans une application complexe, la plupart des objets concernent des composants d'application (par exemple, des pools de connexions de base de données, des commandes, des structures de données telles que des hashmaps) plutôt que des entités du monde réel (telles qu'une carte d'embarquement, une facture ou un fichier mp3 ). Il existe de nombreux bons livres sur les modèles de conception qui vous montrent comment les gens ont résolu de nombreux problèmes récurrents dans ce domaine. Le livre GOF tel qu'il est connu est complet mais très sec, les modèles de conception Head First peuvent être plus accessibles.
En termes d'analyse et de conception du monde réel. Il est souvent utile de penser en termes de noms et de verbes. Par exemple, une bibliothèque de prêt de vidéos (sont-elles obsolètes maintenant?) Peut avoir ces choses / noms:
En termes de verbes:
Ceux-ci peuvent ensuite être transformés en classes avec des opérations (cela fait longtemps que je n'ai pas fait de PHP donc je vais l'éviter):
Tout cela prend beaucoup de pratique et de jouer. La meilleure chose à faire est de rester coincé et d'apprendre des conceptions ratées. À mon avis, OO est quelque chose que vous pouvez continuer à apprendre et à développer au cours de votre vie (ce n'est pas facile et il n'y a pas de solutions parfaites à quoi que ce soit). Un bon design est souvent itératif, alors attendez-vous à essayer quelques idées différentes pour votre webapp "Craig's List".
la source
La meilleure chose à faire est de trouver un moyen de se concentrer sur le cœur de votre application - "post", "user", "post :: FindByName ()", "user-> Validate ()" etc., et ne vous inquiétez pas trop sur la plomberie - comment coller des articles aux tables de base de données, comment garder l'affichage pour un article cohérent entre les différentes recherches et comment coller le formulaire "entrer l'article" à un enregistrement de base de données.
Heureusement, il existe de nombreux frameworks qui font cela pour vous; le paradigme dominant dans les applications Web OO est "Model-View-Controller", également connu sous le nom de MVC ; en PHP, il existe un certain nombre de frameworks MVC prêts à l'emploi que vous pouvez utiliser.
Bien que cela élargisse votre besoin d'apprendre - vous devez maintenant vous renseigner sur MVC ainsi que sur OO - cela signifie que vos efforts d'OO sont principalement limités à la couche "Modèle", qui représente votre domaine d'activité; c'est là que OO est le plus naturel et expressif. La plupart des frameworks MVC vous permettent de définir votre couche "modèle", puis de créer automatiquement un site Web autour de celui-ci en utilisant une technique connue sous le nom d'échafaudage - de cette façon, vous obtenez un moyen rapide d'expérimenter différentes implémentations pour votre modèle de domaine, sans avoir à décoller toute la plomberie.
la source