Newsletter Developpez.com

Inscrivez-vous gratuitement au Club pour recevoir
la newsletter hebdomadaire des développeurs et IT pro

Débat : Règles d'écriture d'un site PHP (optimisation POO)

Le , par KiLVaiDeN, Membre expert
Bonjour,

Je suis habitué à écrire des applications PHP depuis près de 6 ans, cependant, je voudrais faire un bond en avant, au niveau architecture de mes applications, car j'ai une experience faible au niveau programmation orientée objet sur cette plateforme.

Pour cela, j'ai voulu mettre en place un système de classes, permettant de simuler une sorte d'architecture multi-couches semblable à celles qui seraient disponible sous Java/J2EE par exemple.

Je me pose de sérieuse questions quant à la performance d'une telle application, utilisant les objets à tout va, je m'explique :

J'ai un ensemble de classes, chacune ayant un rôle défini ( des sortes de classes métier )
Chacune de ces classes, possède des méthodes permettant d'obtenir un résultat, également sous la forme d'un objet.
pour générer cet objet ( qui est un objet semblable à un DTO, Data Transfer Object ) je passe par d'autres classes d'une couche dite "basse" qui font la connexion à la base de données.

Pour que tout ce beau monde fonctionne ensemble, je ne vois pour l'instant que ce système, mais je le trouve trop lourd :

on arrive sur une page, par exemple index.php
on inclue un fichier ( /classes/index.phpClasses.php ) qui contient les inclusions de classes nécessaires pour le bon fonctionnement de cette page. Chaque page contient son propre "fichier d'inclusions", ceci est une optimisation que j'ai faite, au lieu de _tout_ charger pour chaque page.
je fais les traitements dont j'ai besoin sur l'index, avec les méthodes disponibles dans les classes qui ont étés loadées. Les classes loadées sont des classes métiers, qui elles-même, incluent d'autres classes de la couche "basse".

Je trouve que ça fait beaucoup d'inclusion à chaque fois que l'index.php est appellée...

Ma question est donc : quel sont les moyens standards, en developpement PHP, d'optimiser l'utilisation d'une telle architecture ?

Merci d'avance pour toute aide à ce sujet


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de sahid sahid - Membre actif https://www.developpez.com
le 28/09/2006 à 18:05
lol, vi sympa !

un peux complex quand meme

sinon je comprend pas pkoa tu dis que ca revien au meme que declarer les includes 1 par 1 ... je fais juste un require_once de mon fichier autoload.php ( qui contient cette fonction dans le fichier de démarrage de l'appli pi c tt
Avatar de berceker united berceker united - Expert confirmé https://www.developpez.com
le 28/09/2006 à 18:49
Citation Envoyé par sahid
lol, vi sympa !

un peux complex quand meme

sinon je comprend pas pkoa tu dis que ca revien au meme que declarer les includes 1 par 1 ... je fais juste un require_once de mon fichier autoload.php ( qui contient cette fonction dans le fichier de démarrage de l'appli pi c tt

Oui ça parait complexe parce que mes classe sont préfixé soit par Ctrl, Req,Data,... mais les noms de fichier porte le radicale. Mais là c'est figé quelque soit la classe que je rajoute tant que je respecte le protocole.

Dans ta fonction tu places physiquement les correspondances donc si tu as 100 classes tu devras faire 100 index en gros. Autant que tu faces cela en une seul ligne. Nom de fichier = nom de la classe du moin presque mais tu le gères.
Avatar de sahid sahid - Membre actif https://www.developpez.com
le 28/09/2006 à 19:43
ah vi, ok je comprend maintenant
j'avais jamais trop pensé ca, comme ca.
Avatar de jeff_! jeff_! - Membre éclairé https://www.developpez.com
le 28/09/2006 à 19:44
salut

pour ma part je me base sur un fichier xml
ex:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<engine> 
		<xi:include href="./../../caameleonengine2/config/filerequire.engine.xml"> 
			<xi:fallback> 
   				<error>xinclude: filerequire.engine.xml n'a pas été trouvé</error> 
   			</xi:fallback> 
   		</xi:include> 
		<modules> 
			<arbo> 
				<class name="AccueilArbo" classname="AccueilArbo.class.php" link=""/> 
				<class name="Create_Module" classname="create_module.class.php" link=""/> 
				<class name="Gestion_profile" classname="gestion_profile.class.php" link=""/> 
				<class name="New_site" classname="new_site.class.php" link=""/> 
				<class name="Proprietes_Module" classname="proprietes_module.class.php" link=""/> 
				<class name="Proprietes_Site" classname="proprietes_site.class.php" link=""/> 
				<class name="Supp_Module" classname="supp_module.class.php" link=""/> 
				<class name="translate" classname="translate.class.php" link=""/> 
				<class name="Site_Profiles" classname="site_profiles.class.php" link=""/> 
			</arbo> 
			<batchs> 
				<class name="BatchsImportUser" classname="importUser.batchs.class.php" link=""/> 
			</batchs>
voila ca me parait d'etre souple d'utilisation, et je pense ecrire un fichier de ini cle=>valeur de facon a etre plus rapide
Avatar de berceker united berceker united - Expert confirmé https://www.developpez.com
le 28/09/2006 à 21:37
Citation Envoyé par jeff_!
salut

pour ma part je me base sur un fichier xml
ex:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<engine> 
		<xi:include href="./../../caameleonengine2/config/filerequire.engine.xml"> 
			<xi:fallback> 
   				<error>xinclude: filerequire.engine.xml n'a pas été trouvé</error> 
   			</xi:fallback> 
   		</xi:include> 
		<modules> 
			<arbo> 
				<class name="AccueilArbo" classname="AccueilArbo.class.php" link=""/> 
				<class name="Create_Module" classname="create_module.class.php" link=""/> 
				<class name="Gestion_profile" classname="gestion_profile.class.php" link=""/> 
				<class name="New_site" classname="new_site.class.php" link=""/> 
				<class name="Proprietes_Module" classname="proprietes_module.class.php" link=""/> 
				<class name="Proprietes_Site" classname="proprietes_site.class.php" link=""/> 
				<class name="Supp_Module" classname="supp_module.class.php" link=""/> 
				<class name="translate" classname="translate.class.php" link=""/> 
				<class name="Site_Profiles" classname="site_profiles.class.php" link=""/> 
			</arbo> 
			<batchs> 
				<class name="BatchsImportUser" classname="importUser.batchs.class.php" link=""/> 
			</batchs>
voila ca me parait d'etre souple d'utilisation, et je pense ecrire un fichier de ini cle=>valeur de facon a etre plus rapide

C'est pareille, tu dois en déclarer autant de fois que tu as de classe. Bon je dis cela ça veut pas dire que c'est pas bien mais c'est dommage de passer à coté d'une fonction qui offre une certaine souplesse d'écriture et de gestion.
Avatar de jeff_! jeff_! - Membre éclairé https://www.developpez.com
le 28/09/2006 à 22:36
je suis naz en ce momment
j'ai lut ce que tu a repondu a said
mais je ne comprend pas ca
'est pareille, tu dois en déclarer autant de fois que tu as de classe.

dans ma fonction __autolaod j'appel une fonction qui parse mon xml et qui me retrouve la classe a appelé ( a noter que je peut mettre plusier classe par fichier si je le veux)

je peut changer a tout momment l'emplacement d'un fichier, en modifier mon xml et je peut appeler d'autre fichier xml via xinclude

OUI je declare dans mon xml toute mes classes mais une seule fois???
mouarff je suis fatigué
Avatar de JuTs JuTs - Membre habitué https://www.developpez.com
le 29/09/2006 à 14:01
Je ne comprends pas non plus Je ne vois pas en quoi ta méthode est plus simple re- , quand jeff_! ajoute une balise <class> dans son fichier xml toi tu ajoute un elseif dans la fonction __autoload.
Avatar de sahid sahid - Membre actif https://www.developpez.com
le 29/09/2006 à 14:18
En faite, si j'ai bien compris...

la fonction "berceker united" na plus besoin d'etre modifié, meme si il ajoute une classe a son projet ...il la place dans le rep ou elle doit etre et la fonction va la charger dans le rep qu'il faut quand il en a besoin.

nous on doit a chaque nouvelle class modifier notre fonction en ajoutant la nouvelle classe ...

enfin lol je crois que c ca le truc...
Avatar de berceker united berceker united - Expert confirmé https://www.developpez.com
le 29/09/2006 à 14:34
Citation Envoyé par sahid
En faite, si j'ai bien compris...

la fonction "berceker united" na plus besoin d'etre modifié, meme si il ajoute une classe a son projet ...il la place dans le rep ou elle doit etre et la fonction va la charger dans le rep qu'il faut quand il en a besoin.

nous on doit a chaque nouvelle class modifier notre fonction en ajoutant la nouvelle classe ...

enfin lol je crois que c ca le truc...

Voila tu as tout compris.
Les condition servent a detecter dans quel répertoires doit être cherché la classe.
Avatar de JuTs JuTs - Membre habitué https://www.developpez.com
le 30/09/2006 à 0:53
Ah, ok. Donc tu pourrais avoir une classe appelée DisplayMaClasse et cette classe se trouverait donc dans le fichier /xxx/admin/scripts/php/classes/produits/affichages/MaClasse.php ?

Ai-je bien compris ?
Avatar de berceker united berceker united - Expert confirmé https://www.developpez.com
le 30/09/2006 à 1:08
Citation Envoyé par JuTs
Ah, ok. Donc tu pourrais avoir une classe appelée DisplayMaClasse et cette classe se trouverait donc dans le fichier /xxx/admin/scripts/php/classes/produits/affichages/MaClasse.php ?

Ai-je bien compris ?

Tu as bien compris.
Offres d'emploi IT
Chef projet big data - pse flotte H/F
Safran - Ile de France - Évry (91090)
Expert décisionnel business intelligence H/F
Safran - Ile de France - Évry (91090)
Responsable protection des données H/F
Safran - Ile de France - Magny-les-Hameaux (78114)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique PHP