IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[hardCore PHP OO] injection de dépendance/inversion de contrôle


Sujet :

Langage PHP

  1. #21
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Le découplage des interfaces et d'une manière générale l'assignation des responsabilités entre les classes / librairies / composants c'est de loin l'aspect le plus délicat du métier de développeur à mon avis. Si c'est mal fait c'est difficile à rattraper et les conséquences peuvent être dramatiques. J'ai personnellement abandonné plusieurs projets des suites d'un mauvais design à cause d'une répartition des rôles inadaptée au besoin / projet.

    Par exemple, j'avais créé pour mon besoin une couche DAO complète qui consistait en un assemblage d'au moins 7 layers entre l'API exposée par la couche DAO et l'exécution concrète des requêtes. A la fin, je me suis rendu compte que d'une part c'était beaucoup trop complexe pour mon besoin initial et d'autre par que ça ne couvrait pas tous les usages et que les nouveaux étaient difficiles voire impossible à faire rentrer dans le modèle.

    Il n'y a pas de règle formelle pour découpler correctement des interfaces, il existe de nombreux patterns pour adresser ce problème mais il n'existe pas de vérité absolue, ça dépend totalement de ton besoin et de tes compétences. Ce n'est pas quelque chose qui s'apprend, tu dois l'expérimenter toi même et faire tes propres erreurs pour trouver ton style.

    On peut néanmoins considérer acceptable que deux classes qui on vocation à travailler ensemble puissent être couplées si (et seulement si) elles sont dans le même composant. Par exemple, l'objet MySQLObject peut déléguer la construction des requêtes SQL à MySQLQueryBuilder (car ils sont tous les deux dans le composant model/mysql). En revanche il est tout à fait inapproprié de faire travailler ensemble ArticlesController et PDO car il s'agit là de deux aspects complètement séparés.

    Concernant le script boostrap.php, on peut également l’appeler init.php ou config.php ou autre. Il s'agit juste d'un script qui rassemble toute la logique d'initialisation de l'application (on appelle généralement cette phase le boostrap ou bootstraping). C'est là qu'on va définir la conf (ou la charger depuis un fichier), déclarer nos adaptateurs, définir la logique ACL etc.etc. Bref, tout ce dont l'application aura besoin lors du runtime.

    Les tests sont également un point important dans la réalisation et la conduite d'un projet informatique. Ils permettent de valider que le projet, sa forme et son comportement sont conformes aux attentes fonctionnelles et techniques. Il y a plusieurs niveaux: test unitaires, test fonctionnels, tests de charge etc. Ils sont généralement outrepassés pour des raisons de coûts et de délais mais il faut bien comprendre que les tests font partie intégrante de la démarche de qualité au même titre que l'analyse et conception. Sans eux, comment valider que ce qu'on a écrit ou modifié fonctionne et est toujours valide au regard des spécification ?

    Mon conseil: adopte une approche qui ressemble au TDD et décris tes tests avant d'écrire le code, je ne sais que trop bien combien on a la flemme d'écrire les tests après la lib

    Les tutos sur le net n'abordent pas ces points, ils se concentrent en général sur l'aspect purement technique, c'est pour ça que j'ai écrit un article dénonçant le "tout tuto" qui se pratique ouvertement sur le web de nos jours.

    je n'ai pas suffisamment de temps/motivation pour approfondir les cours un peu obscurs que je trouve sur internet
    A toi de voir mais l'informatique est une maîtresse exigeante qui demande beaucoup de temps et d'investissement personnel.

    Mes indication sont relativement creuses, je ne suis pas un prof, je te donne des pistes à suivre, libre à toi d'aller au bout ou non. Je n'ai pas le temps de faire du coaching ou de l'enseignement à plein temps, comme beaucoup ici, je me contente de mettre les jeunes développeurs sur la voie (du moins j'essaie en tenant compte de ma propre expérience).

    C'est à toi de jouer maintenant, il n'y a pas de vérité absolue et tant que ça marche et que t'en est content, finalement c'est tout ce qui compte.

  2. #22
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Points : 282
    Points
    282
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Le découplage des interfaces et d'une manière générale l'assignation des responsabilités entre les classes / librairies / composants c'est de loin l'aspect le plus délicat du métier de développeur à mon avis. Si c'est mal fait c'est difficile à rattraper et les conséquences peuvent être dramatiques. J'ai personnellement abandonné plusieurs projets des suites d'un mauvais design à cause d'une répartition des rôles inadaptée au besoin / projet.

    Par exemple, j'avais créé pour mon besoin une couche DAO complète qui consistait en un assemblage d'au moins 7 layers entre l'API exposée par la couche DAO et l'exécution concrète des requêtes. A la fin, je me suis rendu compte que d'une part c'était beaucoup trop complexe pour mon besoin initial et d'autre par que ça ne couvrait pas tous les usages et que les nouveaux étaient difficiles voire impossible à faire rentrer dans le modèle.

    Il n'y a pas de règle formelle pour découpler correctement des interfaces, il existe de nombreux patterns pour adresser ce problème mais il n'existe pas de vérité absolue, ça dépend totalement de ton besoin et de tes compétences. Ce n'est pas quelque chose qui s'apprend, tu dois l'expérimenter toi même et faire tes propres erreurs pour trouver ton style.

    On peut néanmoins considérer acceptable que deux classes qui on vocation à travailler ensemble puissent être couplées si (et seulement si) elles sont dans le même composant. Par exemple, l'objet MySQLObject peut déléguer la construction des requêtes SQL à MySQLQueryBuilder (car ils sont tous les deux dans le composant model/mysql). En revanche il est tout à fait inapproprié de faire travailler ensemble ArticlesController et PDO car il s'agit là de deux aspects complètement séparés.
    Ok, c'est bien ce que j'avais compris, mais je profiterai de ton expérience en la matière pour ne pas reproduire tes erreurs, je vais donc approfondir particulièrement ce point en m’intéressant aux bonnes pratiques du découplage, puis je peaufinerai à l'usage.

    Citation Envoyé par Benjamin Delespierre Voir le message
    Concernant le script boostrap.php, on peut également l’appeler init.php ou config.php ou autre. Il s'agit juste d'un script qui rassemble toute la logique d'initialisation de l'application (on appelle généralement cette phase le boostrap ou bootstraping). C'est là qu'on va définir la conf (ou la charger depuis un fichier), déclarer nos adaptateurs, définir la logique ACL etc.etc. Bref, tout ce dont l'application aura besoin lors du runtime.
    Ok, c'est quelque chose que j'avais l'habitude de faire, mais sans savoir que ça s'appelait comme ça...

    Citation Envoyé par Benjamin Delespierre Voir le message
    Les tests sont également un point important dans la réalisation et la conduite d'un projet informatique. Ils permettent de valider que le projet, sa forme et son comportement sont conformes aux attentes fonctionnelles et techniques. Il y a plusieurs niveaux: test unitaires, test fonctionnels, tests de charge etc. Ils sont généralement outrepassés pour des raisons de coûts et de délais mais il faut bien comprendre que les tests font partie intégrante de la démarche de qualité au même titre que l'analyse et conception. Sans eux, comment valider que ce qu'on a écrit ou modifié fonctionne et est toujours valide au regard des spécification ?

    Mon conseil: adopte une approche qui ressemble au TDD et décris tes tests avant d'écrire le code, je ne sais que trop bien combien on a la flemme d'écrire les tests après la lib
    Je suis en train de m'y mettre, et ce qui me motive avant tout, c'est les écueils dans lesquels j'étais tombé avant, quand je ne faisait que quelques tests d'utilisabilité et fonctionnels. Si il est difficile de changer les vieilles habitudes, je sais en revanche précisément pourquoi je le fait...

    Citation Envoyé par Benjamin Delespierre Voir le message
    Les tutos sur le net n'abordent pas ces points, ils se concentrent en général sur l'aspect purement technique, c'est pour ça que j'ai écrit un article dénonçant le "tout tuto" qui se pratique ouvertement sur le web de nos jours.
    Effectivement, je pense également qu'un tuto ne remplacera jamais un cours complet, mais ça permet tout de même de comprendre/prendre en main rapidement quelque chose, ce sont pour moi des approches complémentaires.

    Citation Envoyé par Benjamin Delespierre Voir le message
    A toi de voir mais l'informatique est une maîtresse exigeante qui demande beaucoup de temps et d'investissement personnel.
    J'avais remarqué mais je ne dispose malheureusement que de 24h par jour et de 7jours par semaine.
    Citation Envoyé par Benjamin Delespierre Voir le message
    Mes indication sont relativement creuses, je ne suis pas un prof,
    Tu te sous-estimes...
    Citation Envoyé par Benjamin Delespierre Voir le message
    je te donne des pistes à suivre, libre à toi d'aller au bout ou non.
    Et je t'en remercie, car tu es déjà allé au delà de mes espérances... Tes pistes, j'en ai déjà suivi une partie, je compte en approfondir d'autres, mais au final, je reste très autodidacte, ce que tu m'as proposé était donc exactement ce qu'il me fallait.

    Citation Envoyé par Benjamin Delespierre Voir le message
    Je n'ai pas le temps de faire du coaching ou de l'enseignement à plein temps, comme beaucoup ici, je me contente de mettre les jeunes développeurs sur la voie (du moins j'essaie en tenant compte de ma propre expérience).
    Je ne suis plus un jeune développeur, j'ai juste une certaine expérience avec beaucoup de mauvaise habitudes à combattre. (Parfois, c'est presque plus dur de désapprendre/réapprendre que d'apprendre tout court, mais l’expérience même partiellement négative, reste une force)

    Citation Envoyé par Benjamin Delespierre Voir le message
    C'est à toi de jouer maintenant, il n'y a pas de vérité absolue et tant que ça marche et que t'en est content, finalement c'est tout ce qui compte.
    Très bonne philosophie, c'est également comme ça que je vois les choses
    En tout cas je te remercie chaleureusement pour ton aide, mon sujet est résolu...
    @+
    Piero

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [EJB3] [JBoss] Injection de dépendance circulaire ?
    Par Claythest dans le forum Java EE
    Réponses: 6
    Dernier message: 04/08/2009, 08h11
  2. [EJB3] Injection de dépendance et Stateful
    Par newbeewan dans le forum Java EE
    Réponses: 1
    Dernier message: 15/05/2007, 07h33
  3. [Integration] [EasyMock] Injection de dépendance à l'éxécution
    Par frangin2003 dans le forum Spring
    Réponses: 2
    Dernier message: 06/03/2007, 11h06
  4. Spring + TagSupport et injection de dépendance
    Par worldchampion57 dans le forum Spring Web
    Réponses: 2
    Dernier message: 26/02/2007, 09h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo