Se for decidido que o nosso sistema precisa de uma revisão, o que é a melhor maneira de ir sobre ele?

StackOverflow https://stackoverflow.com/questions/87522

  •  01-07-2019
  •  | 
  •  

Pergunta

Estamos mainting uma aplicação web que é construído em ASP clássico usando VBScript como o idioma principal. Estamos de acordo que a nossa infra-estrutura (framework se preferir) é antiquadas e não nos fornecer as ferramentas adequadas para avançar de uma forma rápida. Temos praticamente abraçou o padrão atual webmvc que está em todo o lugar, e não pode fazê-lo, de forma razoável, com a tecnologia atual. As grandes características que faltam são de despacho adequada e templates com a herança, entre outros.

Atualmente, existem dois caminhos a ser discutido:

  1. Port aplicação existente para ASP clássico usando JScript, que nos permitirá ir esperamos de lá para .NET MSJscript sem muita dificuldade e, eventualmente, acabar na plataforma .NET (de preferência o material MVC será feito pelo então , ASP.NET não é muito melhor do que estavam estamos agora, em nossa opinião). Este tem sido defendido como o caminho mais seguro com menos risco do que a próxima opção, embora isso pode demorar um pouco mais.
  2. Completamente reescrever o aplicativo usando alguma outra tecnologia, agora o líder do bloco é Python WSGI com um quadro personalizado, ORM, e uma boa solução de modelagem. Há espaço de manobra aqui para django mesmo e outras soluções pré-construídas. Este método poderia vir a ser a solução mais rápida, já que provavelmente executar um beta ao lado do produto real, mas tem o potencial para um grande desperdício de tempo, se não pode / não obtê-lo direito.

Isto não significa que a nossa lógica se foi, como o que temos construído ao longo dos anos é bastante estável, como observado apenas difícil de lidar. Ele é construído sobre SQL Server 2005 com o uso pesado de procedimentos armazenados e publicado no IIS 6, só por um pouco mais fundo.

Agora, a pergunta. Alguém tomado qualquer um dos dois caminhos acima? Se assim for, foi bem sucedida, como poderia ter sido melhor, etc. Nós não estamos olhando para desviar muito de fazer uma dessas duas coisas, mas algumas sugestões ou outras soluções seria potencialmente útil.

Foi útil?

Solução

Não jogue fora o seu código!

É o único pior erro que você pode fazer (em uma grande base de código). Consulte coisas que você deve nunca faço, Parte 1 .

Você investiu um grande esforço para que o código antigo e funcionou muitos bugs. Jogá-la fora é um erro desenvolvedor clássico (e que eu tenho feito muitas vezes). Faz você se sentir "melhor", como uma limpeza de primavera. Mas você não precisa comprar um novo apartamento e todos os móveis novos para equipar sua casa. Você pode trabalhar em um quarto de cada vez ... e talvez algumas coisas só precisa de um novo paintjob. Assim, este é o lugar onde refatoração entra.

Para a nova funcionalidade no seu aplicativo, escrevê-lo em C # e chamá-lo de seu ASP clássico . Você será forçado a ser modular quando você reescrever este novo código. Quando você tem tempo, partes refactor do seu antigo código em C #, bem como, e trabalho fora os erros que você vá. Eventualmente, você vai ter substituído a sua aplicação com toda novo código.

Você também pode escrever seu próprio compilador. Nós escrevemos um para nosso aplicativo ASP clássico há muito tempo para nos permitir PHP saída. É chamado Wasabi e eu acho que é a razão Jeff Atwood pensou Joel Spolsky foi maluco. Na verdade, talvez nós devemos apenas enviá-lo, e então você pode usar isso.

Ele nos permitiu mudar toda a nossa base de código para .NET para o próximo lançamento, enquanto apenas reescrever uma parcela muito pequena da nossa fonte. Ele também causou um monte de gente para nos chamar de louco, mas escrever um compilador não é tão complicado, e isso nos deu um monte de flexibilidade.

Além disso, se esta é uma única aplicação interna, apenas deixá-lo. Não reescrevê-lo -. Você é o único cliente e se a exigência é que você precisa para executá-lo como asp clássico, você pode atender a essa exigência

Outras dicas

Use isso como uma oportunidade para remover recursos não utilizados! Definitivamente ir com o novo idioma. Chamá-lo 2.0. Vai ser muito menos trabalho para reconstruir a 80% do que você realmente precisa.

Comece por limpar o seu cérebro limpa de toda a aplicação. Sente-se com uma lista de seus objetivos gerais, em seguida, decidir quais recursos são necessários com base em quais são utilizados. Então redesenhá-lo com essas características em mente, e de construção.

(Eu amo o código de exclusão.)

Ele funciona melhor do que você acreditaria.

Recentemente eu fiz um trabalho de engenharia reversa grande em uma coleção de idade hediondo de código C. Função por função I realocados os recursos que ainda eram relevantes em classes, escreveu testes de unidade para as classes, e construiu-se o que parecia ser uma aplicação de substituição. Ele tinha algumas das original "fluxo lógico" através das aulas, e algumas classes foram mal concebidos [Principalmente isso foi por causa de um subconjunto de variáveis ??globais que era muito difícil de provocar uma separação.]

Ele passou os testes de unidade no nível da classe e no nível geral do aplicativo. A fonte legado foi usado principalmente como uma espécie de "especificação C" trazer à tona as regras de negócio realmente obscuros.

No ano passado, eu escrevi um plano de projeto para a substituição de 30 anos COBOL idade. O cliente estava inclinando-se para Java. I protótipo do modelo de dados revista em Python usando Django como parte do esforço de planejamento. Eu poderia demonstrar as transações do núcleo antes de eu ter feito o planejamento.

Nota :. Foi mais rápido para construir uma interface modelo e admin no Django do que para planejar o projeto como um todo

Por causa da "precisamos usar Java" mentalidade, o projeto resultante será maior e mais caro do que terminar a demo Django. Com nenhum valor real para equilibrar esse custo.

Além disso, eu fiz o mesmo "protótipo no Django" básica para uma aplicação desktop VB que precisava para se tornar uma aplicação web. Eu construí o modelo em Django, dados legados carregado, e foi instalado e funcionando em poucas semanas. Eu usei esse protótipo de trabalho para especificar o restante do esforço de conversão.

Nota :. Eu tive uma implementação de trabalho Django (modelo e apenas páginas de administração) que eu usei para planejar o resto do esforço

A melhor parte sobre fazer este tipo de prototipagem em Django é que você pode mexer com o modelo, testes unitários e páginas de administração até que você obtê-lo direito . Uma vez que o direito do modelo, você pode passar o resto de seu tempo brincar com a interface do usuário até que todos felizes.

Faça o que fizer, veja se você consegue seguir um plano onde você não tem que portar o aplicativo tudo em um big bang. É tentador jogar tudo fora e começar do zero, mas se você consegue fazê-lo gradualmente os erros que você não vai custar muito e causa tanto pânico.

Half um ano atrás eu assumi uma grande aplicação web (felizmente já em Python) que tinha algumas deficiências importantes arquitectónicos (modelos e código misturado, a duplicação de código, o nome dele ...).

Meu plano é eventualmente ter o sistema responder a WSGI, mas eu não estou lá ainda. Eu encontrei a melhor maneira de fazê-lo, é em pequenos passos. Durante a última 6 meses, a reutilização de código tem subido e os progressos têm acelerado.

Os princípios gerais que têm trabalhado para mim:

  1. Jogue fora o código que não é usado ou comentado
  2. Jogue fora todos os comentários que não são úteis
  3. Definir um hierarquia de camadas (modelos, lógica de negócios / lógica do controlador, lógica de exibição vista, etc.) de sua aplicação. Isso não tem que ser muito claro arquitetura corte, mas sim deve ajudá-lo a pensar sobre as várias partes do seu aplicativo e ajudá-lo melhor categorizar seu código.
  4. Se algo grosseiramente viola esta hierarquia, alterar o código de ofender. Mova o código ao redor, recode-lo em outro lugar, etc. Ao mesmo tempo, ajustar o resto do seu aplicativo para usar este código em vez do antigo. Jogue o antigo afastado se não mais usado.
  5. Mantenha-APIs simples!

O progresso pode ser lento e trabalhoso, mas deve valer a pena.

Eu não recomendaria JScript como que é definitivamente o caminho menos percorrido. ASP.NET MVC está amadurecendo rapidamente, e eu acho que você poderia começar uma migração para ele, simultaneamente elevando sobre o quadro ASP.NET MVC como sua finalização vem passando. Outra opção seria usar algo como ASP.NET w / Subsonic ou NHibernate.

Não tente ir 2,0 (mais recursos, em seguida, existe atualmente ou programada) em vez construir a sua nova plataforma com a intenção de resolver as questões atuais com a base de código (manutenção / velocidade / wtf) e de lá ir.

Um bom lugar para começar se você estiver considerando a mudança para Python é reescrever a sua interface de administrador em Django. Isso ajudará você a obter algumas das torções elaboradas em termos de obter Python instalado e funcionando com o IIS (ou migrá-lo para Apache). Falando nisso, eu recomendo isapi-wsgi . É de longe a maneira mais fácil de se levantar e correr com o IIS.

Concordo com Michael Pryor e Joel que é quase sempre uma idéia melhor para continuar a evoluir a sua base de código existente, em vez de re-escrita a partir do zero. Há tipicamente oportunidades para apenas re-escrever ou re-fator de certos componentes para o desempenho ou a flexibilidade.

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