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 :

[Namespace] Questions Autoloader [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 28
    Points
    28
    Par défaut [Namespace] Questions Autoloader
    Bonjour à tous,

    Je suis sur l'ébauche de la refonte d'un projet de grande envergure pour le passer 100% POO, avec de l'optimisation, un clusteur percona multi node master, et une refonte du code.

    Afin de restructurer l'arborescence des fichiers, et le dev. Je vais passer par des espaces de noms.

    Et j'aurais une question.

    Et il préférable de découper un projet en plusieurs espaces de noms par fonctionnalités ? ou bien au contraire utiliser un espace de nom global qui englobe tous le projet ?

    Par exemple je dois refondre la gestion des crons. cette partie sera un part importante de mon projet au vu du temps nécessaire à la refonte. Par exemple je pensais créer un console de gestion des crons qui utilisera le namespace Kernel pour la partie accès aux models, controleur, bdd etc... puis par le namespace CRON qui lui s'occupera de la partie logique lié aux lancements des différents scripts planifiés. Qu'en pensez vous sur cette façon de faire ? ainsi je devrais autoloader le namespace Kernel et Cron lors de l'usage de cette console de gestion des crons.

    Exemple :

    namespace MONPROJET_FONCTIONA
    namespace MONPROJET_FONCTIONB
    namespace MONPROJET_FONCTIONC
    namespace MONPROJET_FONCTIONxxxxx

    ou bien

    namespace FONCTIONA
    namespace FONCTIONB
    namespace FONCTIONC
    namespace FONCTIONxxxxx
    Sachant que chaque fonctionnalité doit pouvoir être dans la capacité d'accéder a chaque autre, ainsi dans FONCTIONB on pourra avoir besoin de classe présente dans FONCTIONA et vice versa, mais il est également possible que FONCTIONC par exemple n'est jamais besoin des classes présentes dans un autre namespace.

    Concernant l'autoloader, j'utilise le UniversalAPCClassLoader de Symfony. Et j'aimerais pouvoir éviter d'avoir a charger l'ensemble des fichiers présents sur chaque espaces de nom si j'en ai pas besoin.

    Ensuite autre question :

    Est il possible facilement d'autoloader sur demande un namespace uniquement dans certaines classes en cas de besoin sans alourdir considérablement le code ? Dans le cas d'un autoloader global qui chargerait l'ensemble du projet, est ce grave si ce dernier doit loader plus de 500 fichiers de classes ?

    Merci d'avance

    Cordialement,

    Decad7

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Voici comment je procède :
    J'ai pour habitude de découper mes espaces de noms non pas par fonctionnalités (ça serait absurde) mais par concept.
    Je regroupe mes concepts sous un projet qui va être par exemple le nom de l'application.
    Au sein de chaque concept, sont présentes les fonctionnalités nécessaires à son fonctionnement.

    Je te donne un exemple :
    ERP                 namespace ERP { }
        Accounting      namespace ERP\Accounting { }
        Invoice         namespace ERP\Invoice { }
        Stock           namespace ERP\Stock { }
        Report          namespace ERP\Report { }
    Si ton arborescence suit tes espaces de nom alors il n'est pas trop difficile de paramétrer un autoloader qui se chargera de trouver les définitions des classes.

    Citation Envoyé par decad7
    Est il possible facilement d'autoloader sur demande un namespace uniquement dans certaines classes en cas de besoin sans alourdir considérablement le code ?
    Tu n'as jamais besoin de charger un espace de nom complet. C'est même inepte, l'autoloader va charger les classes que quand elles sont utilisées dans le code. C'est toute l'utilité du principe de l'autoloading.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Merci pour ta réponse.

    Donc en gros si je dois gérer un code commun (accès bdd, model etc...) lié à chaque site est ce qu'il est judicieux de découper par exemple les namespaces ainsi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Monprojet (namespace global du concept)
    Monprojet\Adserver (partie adserver)
    Monprojet\Cron (partie gestion des crons)
    Monprojet\Lib (partie commune, model etc..)
    Monprojet\Site (partie indépendante a chaque site)
    Monprojet\Site\Site1
    Monprojet\Site\Site2 etc...
    Ou faut il faire quand même différemment, j'ai du mal a démarrer le schéma de base.

    Merci encore

    ++
    Decad7

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    ce qui est susceptible d'être réutilisé pour d'autres développements ne devrait pas être un sous-espace de nom du développement principal, cette partie devrait être sur son propre espace de nom et c'est l'autoloader qui devrait être paramétré.
    Par exemple :
    Imagine toi que la lib Adserver soit commune à plusieurs développements, tu devrais avoir quelque chose comme ça :
    /www/Projet                     namespace Projet
    /www/Projet/...                 namespace Projet/... tu organises le code métier spécifique au projet
    
    Ce qui est commun à tous les projets (lib externes par exemple)
    /www/vendor/AdServer            namespace AdServer  (ici tu paramètres l'autoloader de manière à ce qu'il trouve les implémentations)
    ou à la rigueur :
    /www/Projet/vendor/AdServer     namespace AdServer  (ici tu paramètres l'autoloader de manière à ce qu'il trouve les implémentations)
    ensuite dans ton projet quand tu auras besoin d'utiliser une lib externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use \AdServer\Account;          // c'est l'autoloader ici qui saura trouver le code de la classe
    Le but c'est d'arriver à avoir des briques logicielles les plus indépendantes possibles les unes des autres et ensuite il n'y a plus qu'à les agréger pour bâtir tes projets.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Merci pour ton aide,

    je pense que j'ai compris maintenant pour pouvoir me lancer.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question sur ZF2 Autoloader
    Par Mr User dans le forum Zend Framework
    Réponses: 2
    Dernier message: 23/02/2014, 16h44
  2. autoload et namespace
    Par loustalet dans le forum Langage
    Réponses: 0
    Dernier message: 11/12/2013, 19h14
  3. Namespace et Autoload
    Par toham dans le forum Langage
    Réponses: 2
    Dernier message: 27/08/2012, 17h25
  4. [PHP 5.3] SPL, autoload, namespace et système
    Par Benj. dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2010, 13h27
  5. Question sur le namespace Sybase.Data.AseClient?
    Par ouadie99 dans le forum Accès aux données
    Réponses: 8
    Dernier message: 02/07/2008, 09h12

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