40 votes

Quels sont les modèles de conception d’applications PHP que vous utilisez?

S'il vous plaît partagez votre application préférée de conception / design patterns pour une utilisation en PHP avec moi. Certaines choses que je voudrais savoir:

  • Comment vos dossiers sont conçus
  • La façon dont vous utilisez l'objet oritentation dans vos applications PHP
  • Avez-vous un moyen standard de traiter avec CRUD, la pagination, ou toute autre commune des tâches?
  • Comment évitez-vous à l'aide de code répétitif? Quelle est votre approche pour les bibliothèques/partage de code commun, etc?
  • Ce sont des façons dont vous pouvez rendre votre code plus élégant?

Vous n'avez pas à répondre à toutes ces, répondre à l'une ou quelques-uns de ces sera utile.

La raison pour laquelle je te demande cela,c'est parce que je suis très fatigué de l'écriture répétitive, laid code en PHP et je veux faire un petit cadre de mon travail à la pige aux projets à rendre la programmation plus facile et laissez-moi me concentrer sur la difficile/tâches plutôt que de la validation du formulaire, la pagination, et de l'autre les activités quotidiennes qui représentent jusqu'à 80% de la programmation en PHP

Toutes les opinions apprécié!

71voto

VirtuosiMedia Points 11293

J'aurais peut-être voté vers le bas, mais si vous avez vraiment ne voulez écrire votre propre cadre, je dis allez-y parce que vous allez apprendre beaucoup de l'expérience. Les autres cadres mentionnés ici sont grands et testé et vous n'auriez pas une mauvaise décision de les utiliser, mais c'est votre choix.

Avant de commencer à écrire votre cadre de regarder les autres cadres (à leur syntaxe, la structure du répertoire, schéma d'affectation de noms, des modèles de conception, etc) et essayer de comprendre pourquoi ils ont fait ce qu'ils ont fait et de ce que, si quelque chose, vous feriez différemment. Essayez un peu de tutoriels et de jouer avec leur code, faire quelques exemples d'applications. Si, après avoir fait cela, vous n'aimez pas les utiliser, puis aller de l'avant et de commencer la planification de votre cadre, en gardant ce qui a fonctionné et d'améliorer ce qui ne l'a pas.

Si vous décidez de rouler votre propre, voici quelques choses que je pourrais vous recommander de ma propre expérience:

  • Faire De La Sécurité Votre Priorité - Si vous écrivez une couche d'accès aux données, l'utilisation paramètres liés. Si vous écrivez un formulaire de la classe, de se prémunir contre les CSRF et XSS. Attraper vos exceptions et gérer votre erreurs. Assurez-vous que votre PHP l'environnement est sécurisé. N'essayez pas venir avec votre propre chiffrement l'algorithme. Si vous n'avez pas se concentrer sur la sécurité, c'est pas la peine d'écriture votre propre cadre de référence.
  • Commentez Votre Code - Vous aurez besoin de commentaires pour vous aider à vous souvenir comment votre code fonctionne après un certain temps. J' généralement trouver que docblock commentaires sont plus que suffisant. Au-delà, commentaire pourquoi vous avez fait quelque chose, non ce que vous avez fait. Si vous avez besoin d'expliquer quoi, vous voulez mai pour refactoriser.
  • Seule la Responsabilité de Classes et de Méthodes - la Plupart de vos classes et de méthodes doit faire une chose et seulement une seule chose. Surtout faites attention aux ce avec la base de données - Votre la pagination de la classe ne doit pas reposer sur vos données d'accès de l'objet, ni presque tous les autres (de bas niveau) de la classe.
  • Unité de Test - Si chacun de vos méthodes ne fait qu'une chose, il doit être loin plus facile à tester et il suite à un meilleur code. Écrire le test en premier, puis le code pour passer le test. Cela permettra également de vous donner une plus grande la liberté de refactoriser plus tard sans casser quelque chose.
  • Résumé des Catégories Similaires - Si vous avoir plus d'une classe qui n' des choses semblables, créer une classe parent qui utilise les similitudes entre les classes et de les étendre.
  • Délégué et de Modulariser - Si vous êtes l'écriture d'un système de validation (et les chances sont, vous allez probablement), ne pas inclure de chaque validateur comme un méthode dans certains super validation classe. Les séparer en individuel les classes et de les appeler au besoin. Cette peut être appliqué dans de nombreux domaines: des filtres, des langues, des algorithmes,des les validateurs, et ainsi de suite.
  • Protéger et à Privatiser - Dans la plupart des cas, il est préférable d'utiliser des accesseurs et des setter plutôt que de la laisser accès direct aux variables de classe.
  • API cohérente - Si vous avez un méthode render() et une méthode draw() que font les mêmes choses dans les différents classes, choisissez-en un et aller avec elle dans toutes les classes. Conserver l'ordre de les paramètres de même pour les méthodes qui utilisent les mêmes paramètres. Une API cohérente est plus facile d'API.
  • Rappelez-vous que le Chargement automatique - classe noms peut être un peu maladroit et longue, mais la voie Zend noms de la classes et organise les répertoires permet le chargement automatique est beaucoup plus facile. Mise à jour: depuis PHP 5.3, vous devriez commencer à utiliser les espaces de noms.
  • Jamais d'écho ou d'imprimer quoi que ce soit - Donner comme un retour de la valeur et de permettre à l'utilisateur de décider si elle devrait être l'écho. Beaucoup de fois vous allez utiliser la valeur de retour en tant que paramètre pour une autre méthode.
  • N'Essayez pas de Résoudre le Monde Problèmes - Résoudre votre propre premier. Si vous n'avez pas besoin d'une fonctionnalité droit maintenant, comme une classe pour la localisation des numéros de ou les dates ou la monnaie, ne pas l'écrire. Attendre jusqu'à ce que vous en avez besoin.
  • Ne pas Preoptimize - Construire quelques des applications simples avec votre cadre avant de fine tuning il. Sinon, vous pouvez passer beaucoup de le temps sur rien de productif.
  • Utilisation de la Source de Contrôle - Si vous passer d'innombrables heures à créer un chef-d'œuvre, ne risque pas arriver perdu.

13voto

ryeguy Points 24980

Je suis d'accord avec les affiches ci-dessus. Si vous n'êtes pas à l'aide d'un cadre lors de la programmation en PHP, vous êtes vraiment à la programmation avec vos mains attachées derrière le dos. Personnellement, je recommande de CodeIgniter. C'est la manière la plus rapide du cadre de autour de, il est très facile à apprendre, et a une communauté très active. Toutes vos questions seront répondues par le cadre:

* How your folders are designed

CodeIgniter (ou quelque cadre que ce soit), sépare votre logique dans les vues, les modèles et les contrôleurs, chacun avec leur propre dossier.

* Do you have a standard way of dealing with CRUD, pagination, or any other common tasks?

CI a une pagination de la bibliothèque, et il a la 3eme partie les bibliothèques comme DataMapper pour envelopper vos CRUD appels dans un objet orienté vers (ORM).

* What are ways in which you can make your code more elegant?

La séparation du modèle, vue, contrôleur et le faire pour de très élégant de code.

(Les 2 questions que je n'ai pas les réponses sont à peu près implicite lors de l'utilisation du cadre)

9voto

Rudenoise Points 133

J'imagine que beaucoup de développeurs php ont suivi un parcours similaire à la mienne: petits scripts -> procédure/inline-code -> éventuellement un coup d'oeil au template -> programmation orientée objet -> ensuite, un cadre. Je pense qu'il peut être tout à fait commun pour les développeurs PHP ont "grandi" avec PHP, la conception de l'apprentissage des modèles pour correspondre à la disposition des fonctionnalités avec la version actuelle.

MVC est le plus fréquemment utilisé pour la conception de modèle dans les infrastructures populaires utilisés aujourd'hui. CakePHP est mon cadre de choix bien que la Symphonie et Zend sont très populaires aussi – c'est bien la peine d'essayer de sortir un peu et il va bientôt devenir apparent qui vous vous sentez le plus à l'aise avec.

Pour la plupart des projets (d'où le développement rapide et portable code sont les priorités) - je utiliser Gâteau, mais pour le poids léger des applications (un que j'ai développé récemment a été Bonne Baad) que vous aimeriez courir vite (à faible spec matériel) et n'ont pas besoin de la masse/poids ajouté par la fonctionnalité de l'un des cadres de grandes je recommande la lecture de Rasmus Lerdorf de l'article sur son Pas de Framework PHP MVC.

Fondamentalement, si vous êtes après un vrai langage orienté objet qui encourage beau code et les meilleures pratiques de conception de PHP est toujours perdent de l'aime de Ruby, Python et C#. Mais, PHP a ses points forts, par exemple, pas besoin d'un langage de templating (c'est un), PHP peut courir très vite et à moindre coût, et n'a pas besoin de le poids d'un grand cadre pour toutes les applications.

Je voudrais encourager l'adoption d'un modèle de conception qui prend la gestion d'un modèle de conception comme MVC et de le combiner avec PHP forces.

8voto

Noah Goodrich Points 12645

Je me sens presque comme un disque rayé, mais je vous recommande de prendre un coup d'oeil à certains des cadres communs pour deux raisons:

  1. Même si vous choisissez de ne pas l'utiliser, certains d'entre eux sont très bien écrits et très bien conçu. J'aime particulièrement le Zend Framework, mais j'y reviens dans un instant.
  2. Demandez-vous pourquoi vous êtes en train de réinventer la roue. Vous sentez-vous vraiment que vous comprenez les mêmes problèmes de conception tous les autres visages tellement mieux que la communauté derrière (insérer un cadre de choix ici) pour justifier l'écriture de quelque chose à partir de zéro? En parlant comme celui qui était à l'origine à plusieurs cadres et a décidé qu'ils étaient trop gros, présenté trop d'une courbe d'apprentissage ou trop de surcharge et donc développé mon propre, je peux vous dire que la rédaction de votre propre à partir de zéro est une grande douleur si vous pouvez simplement utiliser un existant qui peut être facilement étendu.

En parlant de l'utilisation d'un cadre qui peut être facilement étendu, j'ai eu des expériences très positives avec le Zend Framework. C'est cohérent et encore faiblement couplé structure permet de rapidement et facilement prolonger un composant existant et l'ensemble du cadre est conçu autour de l'idée que vous aurez besoin d'écrire votre propre helper et classes de plugin à ajouter à l'ensemble de ses fonctionnalités.

J'ai trouvé le Zend Framework pour être totalement flexible que je suis en cours d'exécution d'un seul site web dans le cadre de Zend Framework MVC et une partie de ma vieille merde cadre, et même les plus âgés crappier code que je n'ai pas réussi à réécrire encore. En fait, parce que lors de notre réécriture, nous avons trouvé une page qui a couru de manière inacceptable la lenteur de l'aide de l'ancien cadre, j'ai changé la seule page pour s'exécuter sous le Zend Framework architecture.

Pour répondre à certaines de vos questions, je vous recommande de rechercher dans les Modèles d'Architecture d'Applications d'Entreprise par Martin Fowler. Il fournit un grand nombre de précieuses indications sur la façon de résoudre un certain nombre de ces problèmes comme comment faire pour créer une base de données d'interaction de la couche dans votre application. Fowler couvre également des sujets comme MVC et le Front de Contrôleur de la Page.

2voto

Javier Points 33134

J'ai expliqué la plupart de ma méthodologie PHP ici .

mais de nos jours, j’utilise Django partout où je peux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X