2010-08-27 27 views
0

Voici un modèle que je pense à en ASP:validité de l'ASP classique comprennent modèle

Imaginez que vous avez un fichier main.asp qui contient

<!--#include file="1.asp"--> 

code de 1.asp

...my code... 

pensez-vous qu'il est valide pour factoriser ce que

main.asp

Dim defined_1_asp = false 
<!--#include file="1.asp"--> 

1.asp

if (not defined_1_asp) then 
    defined_1_asp = true 
    ...my code... 
end if 

De cette façon, je pouvais factoriser tout mon SSI inclut tout en vous assurant qu'ils sont exécutés qu'une seule fois. Bien sûr, le contenu de l'inclusion serait inclus, mais l'exécution serait protégée par le if.

Je lis que le si déclaration ne possède pas son propre champ d'application en ASP classique donc il me semble que le comportement du code ne serait pas affecté par le refactoring.

Est-ce que je rencontrerais un goulot d'étranglement si les mêmes fichiers sont inclus SSI plusieurs fois?

Merci beaucoup pour votre aide,

Jérôme Wagner

Répondre

2

AFAIK Vous ne pouvez pas inclure le code plus d'une fois (vous obtiendrez des erreurs avec des identifiants en double).

Je crée des classes en les créant si nécessaire.

+0

oui vous avez raison, j'ai fait le test et l'instruction _if_ ne contourne pas l'erreur de redéfinition! Merci. –

+0

Malheureusement, le problème de redéfinition n'est pas évité par les classes. Si j'inclus 2 fois une définition de classe, le bogue de redéfinition apparaît –

+0

Accepter la création de classes.Malheureusement, je n'avais jamais l'habitude de le faire assez quand j'ai commencé sur asp classique et ça fait encore mal à ce jour. – Castrohenge

0

Si vous devez inclure un élément de code plusieurs fois, vous devez en faire un sous-élément ou une fonction. Dans mon expérience, les SSI sont utilisés pour stocker ces Subs et fonctions. Donc ce que vous pouvez faire est de créer un sous dans 1.asp puis à main.asp faire ceci:

<!--#include file="1.asp"--> 

Dim defined_1_asp = false 

Call MySub 

Avec la Sous être quelque chose comme

If Not defined_1_asp Then 
    ...code here... 
End Sub 
+0

tout le problème est qu'à cause du code spaguetti dans le code existant, 1.asp est inclus 2 fois dans la hiérarchie d'inclusion. Cela crée un conflit (impossible de redéfinir la variable, la classe ou la fonction) –

0

Le SSI include est fait avant tout rendu de la page est fait. Cela signifie que 1.asp est inclus deux fois, ce qui vous donne des problèmes avec les déclarations de variables et toutes sortes de problèmes d'erreurs. Cela devrait être évité à tout prix. Ce que vous pouvez faire à la place (et c'est une pratique bien meilleure de conception et de programmation) est de placer le code dans 1.asp dans un sous-répertoire, vous pouvez alors appeler le sous-système chaque fois que la logique l'exige. Si c'est un problème plus complexe, vous pouvez créer des classes pour le contenu de 1.asp ou le diviser en plusieurs sous-fonctions et fonctions. Beaucoup plus propre et mieux pour l'entretien futur.

+0

mais cela ne semble pas résoudre la collision d'inclusion si la classe est incluse plus d'une fois dans le graphe d'inclusion. le fait-il? –

+0

Non, vous ne devriez pas l'inclure deux fois. Vous utilisez la classe dans tous les endroits appropriés. – bjorsig