Asp classic 经典ASP-include模式的有效性

Asp classic 经典ASP-include模式的有效性,asp-classic,refactoring,server-side-includes,Asp Classic,Refactoring,Server Side Includes,以下是我在ASP中考虑的一种模式: 假设您有一个文件main.asp,其中包含 <!--#include file="1.asp"--> 您认为将其重构为 main.asp ...my code... Dim defined_1_asp = false <!--#include file="1.asp"--> if (not defined_1_asp) then defined_1_asp = true ...my code... end i

以下是我在ASP中考虑的一种模式:

假设您有一个文件main.asp,其中包含

<!--#include file="1.asp"-->
您认为将其重构为

main.asp

   ...my code...
Dim defined_1_asp = false
<!--#include file="1.asp"-->
if (not defined_1_asp) then
    defined_1_asp = true
    ...my code...
end if
通过这种方式,我可以重构我的所有SSI包,同时确保它们只执行一次。当然,includes的内容将被包括在内,但执行将受到if的保护

我读到,if语句在经典ASP中没有自己的作用域,因此在我看来,代码的行为不会受到重构的影响

如果相同的文件多次包含SSI,我会遇到瓶颈吗

非常感谢你的帮助


Jerome Wagner

如果您不能多次包含代码(您将得到重复标识符的错误)


我创建类,在需要时创建它们。

如果需要多次包含任何代码段,应该将其作为子代码或函数。根据我的经验,SSI用于存储这些子节点和函数。因此,您可以在1.asp中创建子对象,然后在main.asp中执行以下操作:

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

Dim defined_1_asp = false

Call MySub

SSI include在页面的任何呈现完成之前完成。这意味着1.asp包含了两次,给您带来了变量声明问题和各种错误问题。这应该不惜一切代价避免。相反,您可以做的是(这是一个更好的设计和编程实践)将1.asp中的代码放入Sub,然后您可以在逻辑需要时调用Sub。如果这是一个更复杂的问题,您可以为1.asp中的内容创建类,或者将其分解为许多子类和函数。更干净,更好用于将来的维护。

是的,你是对的,我做了测试,if语句没有绕过重新定义错误!谢谢。不幸的是,重新定义的问题并没有被类所避免。如果一个类定义包含两次,则重新定义错误似乎与创建类一致。可悲的是,当我开始使用经典asp时,我从来没有这样做过,直到今天它仍然很痛。整个问题是,由于遗留代码中的代码是意大利式的,1.asp在包含层次结构中包含了2次。这会产生冲突(无法重新定义变量、类或函数),但如果类在包含图中包含多次,则似乎无法解决包含冲突。是吗?不,你不应该包括两次。您可以在所有适当的位置使用该类。
If Not defined_1_asp Then
  ...code here...
End Sub