Pergunta

Preciso fazer um desenvolvimento significativo em um sistema ASP grande, antigo e cheio de espaguete.Estou afastado da ASP há muito tempo, concentrando minhas energias no desenvolvimento em Rails.

Um passo básico que tomei foi refatorar páginas em subs e funções com nomes significativos, para que pelo menos seja fácil entender no topo do arquivo o que geralmente está acontecendo.

Existe uma estrutura MVC que vale a pena para ASP?Ou uma prática recomendada sobre como, pelo menos, retirar a lógica de negócios das visualizações?(Lembro-me de fazer muitas inclusões naquela época - ainda é assim que se faz?)

Eu adoraria fazer alguns testes de unidade para lógica de negócios também, mas talvez esteja pedindo demais?

Atualizar:

Existem mais de 200 scripts ASP no projeto, alguns com milhares de linhas;) UGH!

Podemos optar pela "grande reescrita", mas até lá, quando estiver mudando de página, quero gastar um tempinho extra limpando o espaguete.

Foi útil?

Solução

Premissas

A documentação do sistema Classic ASP é bastante leve.

A administração não está procurando uma reescrita.

Como você está usando Ruby on Rails, seu ASP.NET (VB/C#) é, na melhor das hipóteses, aceitável.

Minha experiência

Eu também herdei um sistema ASP clássico que foi montado à toa por ex-tipos Excel-VBA.Havia muitas dessas coisas <font size=3>crap</font> (e às vezes faltando tags de fechamento;Argggh!).Ao longo de 2,5 anos, adicionei um sistema de segurança, uma biblioteca comum, CSS + XHTML e fui capaz de forçar a validação do xhtml1.1 (sem o tipo MIME adequado, infelizmente) e construí um sistema de relatórios bastante robusto e ajaxy que está sendo usado diariamente por 80 usuários.

Usei jEdit, com cTags (como mencionado por atolamento acima) e vários outros plug-ins.

Meu conselhoTente criar um arquivo master include para importar todo o material comumente usado.Coisas como login/logout, acesso a banco de dados, serviços web, bibliotecas javascript, etc.

Use aulas.Eles são ultraprimitivos (sem herança), mas, como disse o jamting, podem ser convenientes.

Recue os scripts corretamente.

Comente

Escreva um documento de arquitetura externa.Eu pessoalmente uso o LyX, porque é uma morte cerebral produzir um PDF bem formatado, mas você pode usar o que quiser.Se você usa um wiki, instale o complemento graphviz e use-o.É super fácil fazer diagramas rápidos que podem ser facilmente modificados.

Como não tenho ideia de quão substanciais as melhorias precisam ser, sugiro que ter um bom documento de arquitetura de alto a médio nível será bastante útil no planejamento das melhorias.

Nos testes de unidade de lógica de negócios, a única coisa que descobri que funciona é configurar um ouvinte xml-rpc em asp que importa a biblioteca principal e expõe as funções (embora não as sub-rotinas) em qualquer uma das subinclusões da biblioteca principal e, em seguida, construir, separadamente, um sistema de teste unitário em uma linguagem com melhor suporte para o material que chama as funções ASP através de xml-rpc.Eu uso python, mas acho que Ruby deve resolver o problema.(Isso faz sentido?).O legal é que a pessoa que escreve a parte de teste unitário do software não precisa nem olhar o código ASP, desde que tenha descrições decentes das funções a serem chamadas, para que possa ser alguém ao seu lado.

Existe um projeto chamado aspunit no sourceforge, mas o último lançamento foi em 2004 e está marcado como inativo.Nunca usei, mas é puro vbscript.Uma rápida olhada no código me diz que parece que os autores sabiam o que estavam fazendo.

Por fim, se precisar de ajuda, tenho alguma disponibilidade para fazer trabalho de teletrabalho contratado (talvez 8 horas/semana no máximo).Siga a trilha do link para obter informações de contato.

Boa sorte!HTH.

Outras dicas

Como reescrever completamente um sistema em funcionamento pode ser muito perigoso, só posso dar uma pequena dica:Configure tags exuberantes, ctags, em seu projeto.Dessa forma você pode pular para a definição de uma função e sub fácil, o que acho que ajuda muito.

Sobre separar a lógica das "visualizações".VBScript suporta algum tipo de OO com classes.Costumo escrever classes que fazem a lógica que incluo na página asp que atua como uma "visualização".Então eu conecto a visualização com a classe como Nome de usuário:<%= MinhaConta.NomeUsuário %>.A classe MyAccount também pode ter métodos como:MyAccount.Login() e assim por diante.

Meio primitivo, mas pelo menos você pode encapsular algum código e ocultá-lo do HTML.

Meu conselho seria continuar a refatoração, o ASP clássico suporta classes, então você poderá mover tudo, exceto o código de exibição, para arquivos ASP incluídos que contêm apenas classes.Veja este artigo com detalhes sobre como mudar do antigo asp para o ASP.NET

Refatorando ASP

Em relação a uma direção futura, eu não teria como objetivo os formulários da Web do ASP.NET; em vez disso, optaria pela nova estrutura MVC da Microsoft, um complemento do ASP.NET. Será muito mais simples migrar para isso do ASP clássico.

eu uso Unidade ASPU para testar unidades de alguns de nossos ASP clássicos e considerá-los úteis.Pode ser antigo, mas o ASP também é.É simples, mas funciona e você pode personalizá-lo ou ampliá-lo, se necessário.

Eu também encontrei Trabalhando de forma eficaz com código legado por Michael Feathers para ser um guia útil para encontrar maneiras de testar parte daquele código antigo.

Incluir arquivos pode ajudar, desde que você mantenha a simplicidade.A certa altura, tentei criar um include para cada classe e não funcionou muito bem.Gosto de ter algumas inclusões principais com lógica de negócios comum e, para páginas complicadas, às vezes, uma inclusão com lógica para cada uma dessas páginas.Suponho que você poderia fazer MVC com uma configuração semelhante.

Existe alguma chance de você mudar do ASP para o ASP.Net?Ou você pretende mantê-lo no ASP clássico, mas apenas limpá-lo.Se possível, eu recomendaria mudar o máximo possível para .Net.Parece que você pode estar reescrevendo/reorganizando muito código de qualquer maneira, então mudar para .Net pode não exigir muito esforço extra.

Presumivelmente, alguém escreveu a maior parte ou todo o sistema que você está mantendo agora.Procure os maus hábitos usuais (código repetido, variáveis ​​com escopo muito amplo, instruções if aninhadas, etc.) e refatore como faria com qualquer outra linguagem.Fique atento a coisas recorrentes no mesmo arquivo ou em arquivos diferentes e abstraia-as em funções.

Se o código foi escrito/mantido por várias pessoas, pode haver alguns problemas com estilo de codificação inconsistente.Acho que colocar o código de volta na linha torna mais fácil ver coisas que podem ser refatoradas.

"Milhares de linhas" me faz suspeitar que também pode haver situações em que coisas vagamente relacionadas estão sendo exibidas na mesma página.Novamente, você deseja abstraí-los em sub-rotinas separadas.

Eventualmente, você deseja escrever objetos para ajudar a encapsular coisas como conectividade de banco de dados, mas demorará um pouco até chegar lá.

Isso é muito antigo, mas não pude resistir a acrescentar meus dois centavos.Se você precisar reescrever e continuar usando o ASP clássico:

  • use JScript!muito mais poderoso, você obtém herança e há alguns benefícios colaterais, como usar os mesmos métodos para validação do lado do servidor que você usa para o lado do cliente
  • você pode absolutamente fazer MVC - eu escrevi uma estrutura MVC e não eram tantas linhas de código
  • você também pode gerar suas classes de modelo automaticamente com um pouco de trabalho.Eu tenho um código para isso que funcionou muito bem
  • certifique-se de fazer consultas parametrizadas e sempre retornar conjuntos de registros desconectados

As práticas de gerenciamento de projetos de desenvolvimento de software indicam que softwares como esse precisam ser aposentados.

Eu sei o quanto é difícil fazer a coisa certa, ainda mais quando o gestor responsável sabe de tudo e tem medo de tudo que não seja da pior maneira possível.

Mas ainda.É necessário começar a trabalhar no desenvolvimento de um novo software.É simplesmente impossível manter este para sempre, e quanto mais tempo esperarem para aposentá-lo, pior.

Se você não tiver a documentação adequada de especificações/requisitos (acho que nenhum software asp no mundo tem, dada a capacidade de noobatry desses codificadores), você precisará de um grupo de usuários que conheçam os recursos do software e de um gerente para ser responsável pela validação dos requisitos.Você precisará revisar cada recurso e documentar seus requisitos.

Durante esse processo você aprenderá mais sobre o software e seus negócios.Depois de ter informações suficientes, você pode começar a desenvolver uma nova.

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