Pergunta

Tenho uma aplicação web grande correr em CGI perl. Está funcionando ok, ele é bem escrito, mas como foi feito no passado, todo o html são definidas codificado nas chamadas CGI, de modo que você pode imaginar, é difícil mantain, melhorar e etc. Então agora eu gostaria de começar para adicionar um pouco de templates e integrar-se com um quadro (catalisador ou CGI :: aplicação). A minha pergunta é: Alguém aqui tem uma experiência como essa? Há alguma coisa que eu devo prestar atenção para? Estou ciente de que com ambos os quadros i pode executar scripts CGI nativos, por isso é bom porque eu posso correr tanto (ad nativa CGI "frameworked" código) em conjunto sem qualquer trauma. Alguma dica?

Foi útil?

Solução

testes de gravação primeiro (por exemplo, com Test::WWW::Mechanize ). Então, quando você mudar as coisas que você sempre sabe se algo der errado, e o que é que os intervalos.

Em seguida, extrair HTML em modelos, e subs comumente usado em módulos. Depois disso, é um pedaço de bolo para mudar para um quadro.

Em geral, ir passo a passo para que você sempre tem um aplicativo de trabalho.

Outras dicas

desembaraçar o código HTML a lógica de processamento no script CGI. Identificar todos os códigos que afeta a saída HTML, já que estes são os candidatos para se tornar variáveis ??de modelo. Separar isso em um arquivo HTML, com as peças identificadas marcados com variáveis ??de modelo. Eventualmente, você será capaz de refazer a página de tal forma que todo o processamento é feito no início do código e o modelo HTML chamado apenas até ao final de todo o processamento.

Neste tipo de situação, reescrever a partir do zero, basicamente, o código antigo é útil para A) testando e detalhes B) de design. O ideal é você fazer um conjunto de testes, para toda a funcionalidade básica que você deseja replicar, ou pelo menos os testes que analisam as páginas de resultados finais para que você possa ver o novo código está retornando a mesma informação para as mesmas entradas.

Projeto detalhes dentro do código pode ser inútil, dependendo de quanto as alças quadro automaticamente. Se você tem um bom conjunto de testes, e uma conversão simples funciona bem, você está feito. Se o comportamento do novo não coincidir com a idade, você provavelmente precisa cavar mais fundo para o "por quê?" e que provavelmente vai ser algo estranho à procura, que não faz sentido à primeira vista.

Uma coisa a lembrar que fazer primeiro é, descobrir se alguém fez algo semelhante no quadro que você está usando. Você pode salvar um monte de tempo e dinheiro.

Aqui está como eu fiz isso usando Python em vez de Perl, mas isso não importa:

  1. separados HTML e código em arquivos distintos. Eu usei um motor de template para isso.
  2. Criado funções do código , que prestou um template com um conjunto de parâmetros.
  3. Organizou o funções (o que eu denominado vistas , inspirado em Django) de uma forma sensata. (Visualizações de administrador, vista do utilizador, etc.) O vistas todo follow a mesma convenção de chamada !
  4. refatorado para fora o material base de dados e solicitação para que os vistas faria só contêm código visão específica (leia-se: GET Handling, solicitações POST, etc., mas nada de baixo nível !). Dependia fortemente de bibliotecas existentes para isso.

Eu estou aqui no momento. :-) O próximo passo óbvio é claro:

  • Escrever um despachante que mapeia URLs aos seus vistas . Isso também irá levar a URLs mais agradáveis ??e mais agradável manuseio 404- e erro de percurso.

Uma das suposições que os quadros fazem é que as urls mapear para o código. Por exemplo, em um quadro muitas vezes você vai ver o seguinte:

http://app.com/docs/list
http://app.com/docs/view/123

Normalmente, porém os antigos scripts CGI não fazer um trabalho como esse, você está mais propenso a ter algo como:

http://app.com/docs.cgi?action=view&id=123

Para tirar proveito do quadro você pode muito bem precisar alterar todas as urls. Se você pode fazer isso, e como você manter links antigos de trabalho, pode muito bem formar uma grande parte de sua decisão.

Também estruturas fornecem suporte para algum tipo de ORM (mapeador de objeto relacional) que abstrai as chamadas de banco de dados e permite que você apenas lidar com os objetos. Para Catalyst este é geralmente DBIx::Class . Você deve avaliar o que o custo de mudar para este será.

Você provavelmente vai achar que você quer fazer uma reescrita completa, com o código antigo como uma plataforma de referência. Isso pode ser muito menos trabalho do que o esperado. No entanto começar com alguns sites de brinquedo para começar uma sensação para qualquer framework / ORM / template você decidir ir com ele.

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