Pergunta

Uma coisa que foi realmente tornar a vida difícil na obtenção até a velocidade sobre a base de código em um projeto ASP clássico é que o arquivo de inclusão situação é uma espécie de confusão. Às vezes eu encontrar a função que eu estava procurando a ser incluído em um arquivo de inclusão que é totalmente alheios. Alguém tem algum conselho sobre como refatorar isso de tal forma que se possa mais facilmente dizer onde uma função é se eles precisam encontrá-lo?

EDIT: Uma coisa que eu esqueci de perguntar: VBScript tem qualquer tipo de mecanismo para impedir que um arquivo seja incluído duas vezes? Sorta como # ifndef do de C?

Foi útil?

Solução

Há algumas coisas básicas que você pode fazer quando se toma mais de um aplicativo ASP clássico, mas provavelmente você vai acabar lamentando fazê-las.

  1. Eliminar duplicado incluir arquivos . Cada aplicativo ASP clássico que eu já vi teve 5 páginas "login.asp" e 7 "datepicker.js" arquivos e assim por diante. Caçar e remover todas as duplicatas e altere referências no restante do aplicativo conforme necessário. Tenha o cuidado de fazer uma verificação de diff em cada arquivo que você removê-lo - muitas vezes os arquivos duplicados têm pequenas diferenças porque o autor original copiada-lo e em seguida, mudou apenas a cópia. Esta é uma grande coisa para Evolution, mas não tanto para o código.
  2. Criar uma estrutura de pastas racional e mover todos os arquivos para ele. Este é óbvio, mas é o que você vai mais lamento fazendo. Se os elos da aplicação são relativo ou absoluto, você vai ter que mudar a maioria deles.
  3. Combine todos os seus arquivos de inclusão em um arquivo grande . Você pode, então, re-order todas as funções de forma lógica e dividi-las em arquivos, de forma sensata com nomes separados. Em seguida, você tem que ir através da página de aplicativo por página e descobrir o que o incluem declarações sobre cada necessidade página para ser (ou ficar com o arquivo de um, e apenas incluí-lo em todas as páginas - não me lembro ou não isso é uma boa idéia em ASP). Eu não posso compreender o nível de dor envolvida aqui, e isso é supondo que os arquivos existentes incluem não fazem uso pesado de globals mesmo nome.

Eu não faria nada disso. Parafraseando Steve Yegge (eu acho), " não há nada de errado com um aplicativo ASP clássico que não pode ser corrigido com uma reescrita total de ". Estou muito sério sobre isso - Eu não acho que há uma maior perda de tempo de um programador neste mundo do que a manutenção de um aplicativo ASP, eo problema só piora as ASP fica cada vez mais fora de data .

Outras dicas

MusiGenisis lista ponto de bala é um bom conselho a seguir, mas eu discordo com -

"Eu não faria nada disso. Parafraseando Steve Yegge (eu acho), 'não há nada de errado com um aplicativo ASP clássico que não pode ser corrigido com uma reescrita total'. Estou muito sério sobre isso -. Eu não acho que há uma maior perda de tempo de um programador neste mundo do que a manutenção de um aplicativo ASP, eo problema só piora as ASP fica cada vez mais fora de moda "

Tudo muito bem, mas se é um aplicativo legado considerável fazendo re-escreve completos muitas vezes não é possível devido à falta de tempo desenvolvedor / recursos.

Temos uma bastante grande aplicativo ASP clássico que tem braços crescidos e pernas ao longo dos anos, não é bonito mas serve as necessidades do negócio. Não temos tempo para passar os próximos seis meses fazendo uma re-escrita completa, que seria bom, mas simplesmente não é possível. A nossa abordagem é -

  1. Onde há nova funcionalidade necessária, ele é implementado em ASP.NET. Isso acontece 95% das vezes. Os casos 5% de ponta geralmente sendo que há um grande número de pontos onde o novo código do aplicativo toca o aplicativo de idade obrigando-nos a fazer um monte de re-trabalho clássico ASP o que poderia tornar o aplicativo mais frágil.

  2. Onde há uma alteração na funcionalidade avaliamos se podemos refatorar para ASP.NET com um impacto mínimo. Se isso não for possível, então vamos implementar a mudança no ASP clássico e arrumar código existente à medida que avançamos por exemplo simplificando incluem nidificação arquivo, substituindo javascript com código amigável navegador mais cruz, que tipo de coisa.

Em resposta à sua pergunta sobre # ifndef de, não há um equivalente estou com medo.

  1. Use um arquivo para títulos globais e inclui (permite nomeá-lo t-head.asp). Este arquivo está incluído em todos os arquivos asp.
  2. Use um arquivo para tornar o site Visual cabeçalho mundial (logotipos, menus, etc.) e incluí-lo logo atrás. Vamos chamá-lo de t-begin.asp
  3. Use um arquivo para tornar o site rodapé mundial visual (direitos autorais, o Google Analytics, etc.) e fechar todos os divs ou tabelas abertas em t-begin.asp. Vamos chamar este arquivo t-end.asp
  4. Use uma pasta para colocar os arquivos de lógica de negócios, chamado BUS. Os arquivos nesta pasta não pode ter inclui. Cada função dentro do arquivo deve ser precedido pelo nome da unidade lógica (IE: todas as funções em products.asp deve começar com o produto _ *)
  5. Use uma pasta para colocar algum código UI reutilizado chamado UI. Os arquivos nesta pasta não pode ter inclui.

Exemplo:

<%@  Language=VBScript %>
<% Option Explicit %>
<% Response.Buffer = true%>
<html>
<head>
<!--#include file="../general/t-head.asp"-->
<!--#include file="../bus/product.asp"-->
<title>Products page</title>
</head>
<body>
<!--#include file="../general/t-begin.asp"-->

   <% 'all your code  %>

<!--#include file="../general/t-end.asp"--> 
</body>
</html>

Wow. Ela constantemente me surpreende quantas pessoas têm um ódio para o ASP. Nas mãos decentes é uma linguagem perfeitamente capaz de projetar aplicações web.

No entanto, vou admitir que o caminho incluir arquivos são gerenciados em ASP pode ser um pouco de um brainache - porque (dependendo de como você usá-los) eles têm que ser carregado e analisado, mesmo se você não está usando metade as funções contido dentro.

I tendem a ter um arquivo de inclusão (initialise.asp ou algo assim) que se inclui links para várias funções bibliotecas (lib_http.asp, lib_mssql.asp ou similar) e todas as funções de biblioteca são auto-suficientes, não há nenhuma preocupação sobre cruzar variáveis. Quaisquer vars globais são declarados e definido no arquivo mestre. Isto significa que posso usar um qualquer função, em qualquer altura e não se preocupar com onde ele foi definido, é só lá para o uso. E IDEs, como Visual Studio e PrimalScript têm a capacidade de "salto para definição" quando você encontra uma chamada para uma função que você não reconhece.

Então, qualquer específicos de script inclui estão incluídos no roteiro após a chamada para este mestre incluem arquivo.

I admitir que esta é uma abordagem memória de fome como todas as funções em todas as bibliotecas são compiladas para cada chamada de script, então o método precisa ser refinado para cada site que você desenvolve - decidir o que chamamos via o mestre incluir eo que é específica da página mais. Seria bom para ser capaz apenas para carregar o que você precisa - mas essa é a abordagem DLL e não está disponível para a maioria dos desenvolvimentos do mundo real, e também você tem que pesar o custo do processador de compilação de pequenos scripts vs componentes de carga.

A estrutura de diretório conciso é necessária e facilmente desenvolvido, mas pode ser uma tarefa de percorrer todo o código em um site existente e alterar quaisquer ligações ou chamadas MapPath. Além disso, estar ciente de que alguns administradores do IIS não permitir o método '..\' de atravessar diretórios via VBScript, então, em seguida, todas as referências de arquivo tem que ser caminhos absolutos.

eu acho que você deve considerar mover seu código de ASP VBScript para Visual Basic DLLs. que vai aliviar em você ter muito inclui.

Eu não sei de uma maneira de evitar uma inserção dupla, que não seja recebendo uma mensagem de erro que é. Você está vendo inclui colocados em toda a página, que é torná-los difíceis de detectar?

Apenas como um aparte, você está trabalhando com uma cópia do código e banco de dados em um servidor de desenvolvimento? Da minha experiência, a primeira coisa a fazer é separar-se do site ao vivo o mais rápido possível. Enquanto um aborrecimento, inicialmente, vai dar-lhe a liberdade de fazer mudanças sem bagunçar o site ao vivo. É fácil de fazer que uma pequena mudança em um include e BAM! todo o site vai para baixo.

Eu tenho trabalhado através de alguns projetos como você descreveu e utilizou as seguintes estratégias:

reescrita completa -. Perfeito quando há tempo / dinheiro, mas geralmente fico com a chamada quando algo tem de errado se foi e os resultados são necessários o mais rápido possível

Os projetos menores - eu abrir tudo no IDE e apenas começar a procurar todos os arquivos de projeto para as funções / sub, a fim de construir um conhecimento do incluir lógica. Praticamente a cada vez, tudo é espalhar-se por toda parte, assim que eu começar a reconstruir o inclui organizado pela lógica de negócios. Eu também funcionar através de código inline (código cru, não subs ou funções) jogados em um incluem, por isso vou geralmente apenas puxar a volta código na página de refatoração mais tarde.

Os projetos maiores - Eu vou usar algum código que tem que volta para analisar o inclui para linhas com sub cabeçalhos / função e despejar os para um arquivo de texto para construir uma lista de quais são, onde e se referem a que as rotinas. Isto vem a calhar quando você tem uma tonelada de inclui em cada página e não pode obter sua cabeça em torno da base de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top