|
Publicité ' | ||||||||||||||||||||||||
|
|
#41 |
|
Expert Confirmé
![]() ![]() |
Merci wamania pour ces éclaircissements.
Ok, pour résumé, si j'ai bien saisi, on doit utiliser ce concept lorsqu'il ya beaucoups d'algo (méthodes), n'est-ce pas ? Ou bien c'est à utiliser dans tous les cas, le plus possible ? Et dernière question : Ya-t-il des inconvéniants dans le "strategy" ? Merci d'avance. |
|
|
00
|
|
|
#42 | |
![]() ![]() Développeur Web Inscription : juillet 2003 Messages : 683 ![]() |
Citation:
Ok, c'est pas précis, mais en gros, et ça répondra à ta question sur les inconvénients, c'est une technique qd même relativement lourde et qui doit être pensée AVANT de coder. ça peut être tout de même utilisé même pour de petits projets, du moment qu'on souhaite faire un choix à la volée entre plusieurs solutions comparables. Il faut clairement ça soit comparable, c'est à dire en POO implémenter la même interface au moins. Par exemple, dans le lien que tu files, l'auteur fait un choix entre des pays, avec langue, monnaie... qui sont en tout point comparables : à un mot, TOUS les pays auront une traduction dans leurs langues, à un prix, TOUS les pays auront un prix dans leurs monnaies....
__________________
Articles sur developpez.com - Gestion des exceptions avec PHP5 - Chiffrement et hash en PHP contre l'attaque Man in the middle - Aedituus - Espace membre sécurisé en PHP5 Lithium : ORM ActiveRecord PHP5 extrêmement léger |
|
|
00
|
|
|
#43 |
|
Expert Confirmé
![]() ![]() |
Merci wamania. C'est à présent compris.
|
|
|
00
|
|
|
#44 | |||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 4 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#45 | |
|
Inscription : février 2007 Messages : 8 ![]() |
Citation:
|
|
|
|
00
|
|
|
#46 | |
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
Toutes les méthodes possibles sont bonnes ou mauvaises à un moment donné pour telle ou telle application... Vouloir séparer à tout pris le html du php n'est pas le vrai problème. Le problème structurel qui se cache derrière c'est de séparer, dans une application, la partie présentation de la partie métier. Et ceci est valable pour tous les types d'applications qui ont un rendu visuel, que ce soit web, desktop ou autre. |
|
|
|
00
|
|
|
#47 | |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
Citation:
Apparté sur Smarty, certain aime, d'autre déteste (comme moi), mais quel que soit l'avis. Au final il n'apporte qu'une plus grande rigueur et structure au code. Et on doit pouvoir, en tout cas je le fais, en faire autant en restant en PHP pur. Le tout étant de se l'imposer. |
|
|
|
00
|
|
|
#48 | |
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 161 ![]() |
Citation:
je crée une table client avec ses champs je crée une classe Client qui représente un client et toute les méthode que je peut faire sur mon client je fais dériver cette classe d'une de mon package appelé MapObject je crée une classe ClientTable qui dérive de MapTable sans ajouter une seule méthode à cette classe je peux lire et écrire dans ma table rechercher par Id ou tout autre critère je peux suprimer des éléments mieux à chaquefois que je pioche un élément dans ma table il m'est retourné un objet de la classe client je peux donc lui applique ses méthodes je peut le modifier et l'enregistrer directement je peux demander un client vide pour le préparer et l'enregister. je peux invoquer les jointure de ma base pour retrouver les facture de mon client etc. et tout ça sans jamais écrire une ligne de SQL mais je peux aller plus loin mes client sont des personnes et Je peux faire dériver mon Client de Personne pour bénéficier des méthode de la classe Personne Je peux aller encore plus loin et définir une entité vue comme une classe dont les données sont stockées dans un agrégat de tables et je peux biensur surcharger n'importe quelle méthode des classe Table ou Object dérivant de MapTable et MapObject pour optimiser ou ajouter des fonction propre à mon aplication. du coup j'ai une couche DAO qui ne fait que de l'accès au donnée une couche Maping qui sépare cette couche de la couche métier une couche métier qui décrit les comportement de entité manipulée par l'application et une couche applicative qui ne sais absolument pas comment sont traité ls donnée ni où elle sont stokée. Je peux en très peut de temps passer de MySQL à Oracle ou à PostgreSQL Je peux redéfinir le modèle phisique sans remettre en cause toute l'application. (il ne faut redéfinir que le mapping) Je peux ajouter de nouvelle clase offrant de nouvelle fonctionnalité sans toucher à la base. ETC. Il y a tant de possibilité qui s'offre alors que ce serait trop long à décrire. la principale est l'indémendance des couches logicielles donc plus facile à maintenir et à faire évoluer plus facile à porter plus facile à réutiliser A+JYT |
|
|
|
00
|
|
|
#49 |
|
Expert Confirmé
![]() ![]() Développeur informatique Inscription : février 2005 Messages : 3 031 ![]() |
En fait, les choses doit se faire dans l'autre sens. Lors de l'analyse d'un projet il faut commencer par [...] . Arrivé au diagramme de classe final c'est de là qu'il commencer à penser au table SQL car les tables sql représente une instance d'un objet. C'est à un dire l'objet à moment T. C'est pas l'objet qui doit représenter un table.
Mais ceci est dans le meilleur des mondes. Je trouvais plus judicieux de commencer par les classes que les tables. De cette manière je gagne du temps et la structure des tables deviennent plus logique et optimisées.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
00
|
|
|
#50 |
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 161 ![]() |
Mon approche n'est pas tout à fais celle-là
Je fais deux analyses en parallèles. Je fais une conception orienté objet de mon application sans me soucier de la façon dont seront stockés les données. j'obtiens alors un diagramme de classes qui corresponds au besoin de l'application. à côté de ça j'analyse la demande pour déterminer quels sont les éléments à stocker dans ma base et sous quelle forme. à quel genre de manipulation il seront soumis. une table don les données ne change quasiment pas (données de références par exemple) n'a pas à être stockée de la même façon que des données très dynamiques. j'obtiens alors un modèle de données normalisé et optimal. il n'y a pas obligatoirement adéquation entre classe et table. il peux y avoir des tables qui n'apparaissent pas en tant que telle dans le diagramme de classe de même il peut y avoir des classe qui ne correspondent pas à une table. à cette étape se pose la question de fond Dois-je dé-normaliser ma base pour quelle corresponde plus à mes Classes ? Dois-Je réviser mon diagramme pour le mettre en adéquation avec la base ? Et enfin Puis-je garder les deux ainsi ? par exemple je manipule des produits, des services, des abonnements. Fonctionnellement ces éléments ont des comportements très différents et n'ont pas de méthodes communes mais ils ont tous un nom, un cout logiquement je me retrouve avec trois Classes qui n'héritent pas nécessairement d'une même classe (un taxe à aussi un nom et un cout) mais côté base de données les manipulation que je vais faire dessus les produits, les services, les abonnements sont identiques tout comme le sont les données. Je vais donc avoir idéalement une seule table pour faire la différence je mettrais un champs qui indique le type. J'ai donc devant moi trois solution - Je remplace ma table par trois et j'ai une relation 1-1 entre table et classe (ça facilite la vie) - Je Fais une seule Classe avec des méthodes pour traiter les différences (ça optimise la base) - Je garde les deux et je fais correspondre les trois classe avec la même table en fixant le type pour chaque classe (J'ai une indépendance entre la couche métier, la classe, et la couche DAO la table) Chaque solution à un cout et c'est à la conception qu'il faut faire le choix. de façon générale j'ai une Classe qui est en face d'une table principale liée avec plusieurs table de référence et de liaison. La classe facture et en liaison avec la table facture, remise_facture (relation NM avec les remises), et facture_items (relation NM des éléments facturés) avec l'expérience on voit apparaitre dans l'analyse des entités manipulées par l'application qui vont se décliner sous forme d'un groupe de classes ces mêmes entités seront représenter en base par un ensemble de tables, sans pour autant avoir d'adéquation un à un tout l'avantage d'utiliser un modèle objet pour l'accès au donnée est que justement il permet de cacher à l'application la façon dont les données sont stocké. il deviens possible de déplacer une ou toute partie de données vers d'autre mode d'enregistrements sans perturber l'application. seule l'interface DAO est impacter. Par exemple des données sur du personnel sotcké en base pour le besoin d'un application qui sont remplacé par un accès à l'annuaire de l'entreprise. Un membre du personnel reste un membre du personnel, ce qu'en fait l'appli ne change pas mais les donnée ne sont plus dans la base. A+JYT |
|
|
00
|
|
|
#51 | |
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 161 ![]() |
Citation:
dans le premier cas on calcule la position de l'élément du tableau en prenant la valeur de a et l'adresse de $tab on copie la valeur de cet élément dans b et on incrémenta a dans le deuxième on incrémente a puis on calcule la position de l'élément du tableau en prenant la valeur de a et l'adresse de $tab on copie la valeur de cet élément dans b à aucun moment on ne passe par une étape intermédiaire. tout les compilateur savent optimiser ce genre de chose. prend gcc compile ce genre de code et passe le au débugeur pas à pas en binaire tu va voir qu'il n'y a que l'ordre qui change. le compilateur va simplement optimiser le moment ou il fait l'incrément une instruction n'est pas une fonction et ne s'exécute pas comme tel encore une fois l'optimisation des perfs ne se fait pas sur ces éléments comme cela mais sur une conception plus globale. les compilateurs font aujourd'hui des optimisation telles que souvent même avec des algo qui nous semble bien différents ils pondent le même code. A+JYT |
|
|
|
00
|
|
|
#52 | |
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 161 ![]() |
Citation:
donc mon application ne produit aucun élément sur la sortie. pas de HTML pas de print pas de echo en générale mon application construit une structure de donné correspondant à ce que le client demande. d'un autre côté j'ai un code (par exemple un système de template, DOM, etc) qui prends cette structure et la mets en forme comme le veut le client. dans mes application une même fonctionnalité peut être accédé par différent client un navigateur => je formate la structure en HTML (XHTML) un Javascript => je formate en JSON ou XML suivant la demande un script php => Je sérialise en php un client SOAP => j'enveloppe ma structure. Je peux ainsi multiplier les format à l'infini WAP IMODE VCAL VCARD PDF SVG VML OpenDoc Excel... Jamais de HTML de echo ou de print dans le PHP Jamais de PHP dans les documents de sortie A+JYT |
|
|
|
00
|
|
|
#53 | |||
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 161 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#54 | |||
|
Membre éclairé
![]() Inscription : novembre 2006 Messages : 336 ![]() |
Citation:
Echo est une instruction, de ce fait le fait d'utiliser des points revient à avoir deux fois echo pour afficher la chaine séparée de la variable. Alors que la virgule permet de tout faire d'un coup. Mes méthodes : ->Utilisation d'une classe qui gère les différents SGBD de manière transparente ->Utilisation de mysql_real_escape_string() au lieu de addslashes() ->Utilisation d'une classe par vue. ->Convention de nommage propre ( et malheuresement pas toujours respectées par les autres dev) ->Organisation de l'arborescence ->Séparation du code php et html au maximum ->Commentaire plus versionning ->Utilisation de POO au maximum |
|||
|
|
00
|
|
|
#55 |
|
Futur Membre du Club
![]() Inscription : décembre 2005 Messages : 69 ![]() |
Bonjour,
Petite question : comment faites-vous pour tester la vitesse d'exécution de vos pages ? (y'a-t-il un plug firefox qui permet de faire ça, je n'ai rien vu dans webdevelopper) |
|
|
00
|
|
|
#56 | ||
|
Membre émérite
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
Un code récupéré 2 ou 3 topics plus bas, de Mr.N :
Code :
|
||
|
|
00
|
|
|
#57 |
|
Futur Membre du Club
![]() Inscription : décembre 2005 Messages : 69 ![]() |
merci, à propos de requêtes MySQL, j'aimerais avoir votre avis sur un truc: c'est quoi le mieux point de vue performance, faire deux requêtes, ou une seule plus complexe (contenant les deux) ?
au pire je testerais moi-même avec microtime |
|
|
00
|
|
|
#58 |
|
Membre émérite
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
Une requête plus complexe est généralement beaucoup (beaucoup, beaucoup) plus rapide.
Après, il ne faut pas non plus faire n'importe quoi. |
|
|
00
|
|
|
#59 |
|
Futur Membre du Club
![]() Inscription : décembre 2005 Messages : 69 ![]() |
Non, mais il m'arrive fréquemment d'avoir des requêtes avec 3 joitures, un WHERE avec (NOT) IN + requête imbriquée + ORDER BY... par exemple
des requêtes que je pourrais simplifier syntaxiquement parlant en utilisant les méthodes de mes classes mais qui augmenteraient le nombre de requêtes... |
|
|
00
|
|
|
#60 |
|
Expert Confirmé
![]() ![]() Développeur informatique Inscription : février 2005 Messages : 3 031 ![]() |
Maintenant, j'ai pris la décision de ne plus placer de select dans mon code source php. Je fais appelle que à des fonctions SQL Qui lui gère le retour d'information. Dans d'autre cas j'utilise des requêtes préparées
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com