Recentemente, encontrei esse cenário de aplicação. Uma certa empresa usa um sistema desenvolvido pela PowerBuilder há muitos anos. À medida que a empresa se desenvolvia, ela decidiu converter o antigo sistema de informação de C/S para a popular arquitetura B/S. surgiu o problema: O original Alguns sistemas possuem um grande número de entrada de dados, impressão precisa de relatórios e outras funções, e os usuários estão muito acostumados com esse tipo de operação. Espera-se que o novo sistema possa manter esse recurso fácil de usar. do sistema original.
Fiquei com dor de cabeça assim que ouvi essa pergunta. O PB tem muitos controles poderosos. É muito difícil movê-los para o navegador e usar páginas da web para simulá-los.
1. Por que é difícil para o B/S fornecer uma boa experiência de interação do usuário.
Existem vários problemas maiores aqui:
(1) O protocolo HTTP sem estado
pode trocar informações diretamente entre os formulários do Windows por meio da memória, mas como base do B/S? arquitetura comunicação O protocolo HTTP não tem estado.
Se o navegador for considerado um convidado e o Servidor Web for considerado um hotel, sob o gerenciamento do protocolo HTTP, esta situação ocorrerá: não importa quantas vezes um convidado visite, o Servidor Web o considerará como um primeiro- visitante do tempo. Desta forma, os hóspedes devem trazer sempre consigo os seus documentos de identificação para que os funcionários do hotel “verifiquem a sua identidade”.
A falta de estado do protocolo HTTP leva ao "desrespeito" do Servidor Web. Embora isso possa aumentar o rendimento do Servidor Web, traz problemas para o desenvolvimento de sistemas aplicativos. Porque muitas vezes existem muitos processos de processamento de negócios em sistemas aplicativos, que são inerentemente fluidos de informações, ou seja, os dados originais entram por uma extremidade e deveriam ter passado por determinado processamento quando saem da outra extremidade. as informações em todo o processo de negócios serão perdidas? Portanto, o compartilhamento de informações entre solicitações HTTP se torna um problema problemático. Este é o problema de "retenção de estado" das solicitações HTTP. Todo sistema B/S deve resolver este problema. A Microsoft pensou em alguns "truques tortuosos", como fazer uso total dos campos ocultos nas páginas HTML e depois fazer alguns truques no servidor Web, então o ASP.NET possui um conjunto de tecnologias para manter o estado entre cada solicitação HTTP: Sessão, Cookie, ViewState, Perfil, Aplicativo.
No entanto, o problema não está completamente resolvido. Por exemplo, na caixa de diálogo comum do sistema C/S que coleta informações de entrada do usuário, há troca de informações entre o formulário principal e a caixa de diálogo (é dividida em dois tipos: modal e não modal. A primeira caixa de diálogo é não fechado. O formulário principal não pode ser ativado). Na arquitetura B/S, como cada solicitação do navegador é independente, a troca direta de informações semelhante a uma caixa de diálogo modal deve ser implementada entre duas janelas independentes do navegador. sabe o que fazer.
AJAX usa o seguinte método para "simular" um formulário modal: "combinar" o formulário principal e a caixa de diálogo em um. A caixa de diálogo é um elemento div em HTML, que geralmente fica oculto e é exibido quando necessário. O AJAX Control Toolkit da Microsoft ainda possui um controle projetado para essa funcionalidade. Existem inúmeros truques como esse no desenvolvimento de B/S.
Pode-se observar que muitas funções que podem ser facilmente implementadas em C/S são muito difíceis de implementar em B/S.
(2) Ambiente operacional especial -
o ambiente operacional front-end do sistema B/S do navegador é o navegador, que traz muitas restrições. Ele não pode fazer muitas coisas, como acessar diretamente o hardware (como impressoras), e não pode fazer tudo. uso dele.
Por exemplo, os novos computadores de hoje são todos dual-core. Você pode usar JavaScript eHTML
diretamente para escrever um programa multithread para aproveitar ao máximo esses dois "núcleos Pentium"?
system) Acima, você pode chamar todas as funções fornecidas pelo SO, e esta limitação não existe.
(3) A embaraçosa linguagem de programação do cliente Web - JavaScript,
um programa C/S tradicional, pode usar um grande número de várias linguagens de desenvolvimento, especialmente linguagens orientadas a objetos convencionais, como C++, Java e C#, que são poderoso e fácil de usar, várias ferramentas de desenvolvimento estão disponíveis e são muito maduras.
Pelo contrário, JavaScript, a linguagem de programação mais comumente usada no front-end B/S, não é apenas detestado, mas até "odiado" por muitos programadores, que consideram "programar com JavaScript" uma tarefa árdua.
Vamos dar uma olhada nas duas principais deficiências do JavaScript.
Primeiro, falta um modelo de programação claro e unificado.
Embora o JavaScript tenha Java em seu nome e use sintaxe semelhante, ele não tem nada a ver com o Java real. Infelizmente, ela é um patinho feio. Ela sempre quer se tornar um cisne, mas não espera que os outros não acreditem em sua ideia.
JavaScript usa muitos objetos, mas não é realmente convincente dizer que é orientado a objetos (a unidade básica da programação orientada a objetos é uma classe. Por exemplo, ele não possui a palavra-chave class semelhante às principais linguagens orientadas a objetos). como C#. Está em todos os lugares funções uma por uma, o que torna difícil definir claramente todo o código na forma de classes ao mesmo tempo, não é estruturado (a unidade básica da programação estruturada é uma função; ), porque o navegador usa um fluxo ao analisar documentos HTML. Isso faz com que algum código JavaScript seja colocado fora da função e executado diretamente ao analisar o documento HTML, enquanto a outra parte do código colocada na função é executada principalmente em um evento. maneira orientada, que traz problemas complexos O fluxo de execução do programa é muito menos conciso do que o uso unificado de chamadas de função em programação puramente estruturada.
Deste ponto de vista, o JavaScript possui as características dos métodos de programação orientados a objetos, estruturados e não estruturados, mas não é peixe nem ave. Não possui um modelo de programação claro e unificado. estrutura e fácil manutenção.
Em segundo lugar, outra falha do JavaScript é o ambiente de execução do navegador.
Devido a razões históricas, navegadores diferentes e até versões diferentes do mesmo navegador têm modelos de programação mais ou menos diferentes. Portanto, precisamos escrever um código para detectar o tipo de navegador. IE, e escreveu outro conjunto para FireFox. Isso é realmente um incômodo.
Os problemas acima são quase os "defeitos" "inerentes" do sistema de arquitetura B/S. As deficiências inatas são complementadas pela criação, e as pessoas inventaram muitos truques para resolver esses problemas. AJAX é a estrela da esperança que todos estão otimistas.
2. Estrela da Esperança - AJAX
Nos últimos dias, aprendi sistematicamente sobre a estrutura AJAX da Microsoft. Descobri que a complexidade desta estrutura excedeu em muito a minha estimativa original. Os engenheiros da Microsoft que projetaram a estrutura AJAX exploraram profundamente o potencial de várias tecnologias de desenvolvimento Web, que em grande medida compensaram os problemas levantados anteriormente.
(1) Expansão da linguagem JavaScript:
a Microsoft aprimorou os recursos orientados a objetos do JavaScript, fornecendo uma biblioteca AJAX encapsulada, que pode implementar facilmente funções como herança, definição de interfaces, serialização de objetos, acionamento de eventos, tipos de reflexão, etc., embora é menor que o real Ainda existe uma lacuna entre as linguagens orientadas a objetos (como Java/C#), mas ser capaz de transformar JavaScript "feio" em algo visível é considerado extraordinário.
(2) Melhorar significativamente a funcionalidade do código do navegador
Com o suporte da Biblioteca AJAX e a funcionalidade aprimorada do JavaScript, e com o suporte do próprio navegador, você pode escrever scripts JavaScript no navegador para fazer solicitações assíncronas facilmente ao navegador. server., realiza atualização parcial da página e pode chamar diretamente o serviço da Web.
(3) A introdução do método de desenvolvimento baseado em componentes (CBD)
O desenvolvimento baseado em componentes (CBD) tem sido o principal método de desenvolvimento para sistemas orientados a objetos. Embora a SOA (arquitetura baseada em serviços) seja atualmente muito badalada, ela precisa ser desenvolvida. atingir a maturidade do CBD Até certo ponto, levará tempo.
Para JavaScript, e muito menos SOA, é muito difícil implementar CBD.
Para realizar o CBD, a Microsoft "fez grandes melhorias" no JavaScript e aprimorou muitos recursos. Com base na biblioteca Microsoft AJAX, os programadores podem desenvolver três tipos de componentes reutilizáveis: None_Visual Component (componente invisível, equivalente a um sistema orientado a objetos). deles fornecem funções públicas), Comportamento (comportamento, estendendo as funções de controles da Web existentes) e Controle (controles da Web com elementos de interface visual).
Em particular, as dezenas de controles fornecidos no AJAX Control ToolKit basicamente realizam a simulação B/S da maioria dos recursos da interface de usuário C/S e são um modelo para a aplicação deste novo modelo de programação.
As melhorias da Microsoft no modelo de programação JavaScript permitem que os engenheiros de software finalmente desenvolvam código de cliente Web usando métodos de desenvolvimento CBD. Acho que isso é um progresso.
(4) Capacidades aprimoradas do lado do servidor
Para aprimorar as capacidades do código do lado do navegador, ele deve ser coordenado através do lado do servidor. O próprio AJAX é baseado no modelo de programação no qual o navegador e o servidor da Web se apoiam (o servidor da Web fornece serviços de dados e o navegador fornece objetos XMLHttpRequest para emitir solicitações assíncronas ao servidor da Web. Quando os dados voltam, os programadores podem escrever código em JavaScript para implementar processamento parcial dinâmico de renovação de páginas da web).
Através da extensão AJAX, a Microsoft aprimorou a funcionalidade da estrutura ASP.NET do lado do servidor. E externalize funções comumente usadas em controles Web simples, como o controle principal do AJAX, ScriptManager, UpdatePanel para definir áreas atualizáveis da página e dezenas de AJAX Control Toolkit para aprimorar os controles ASP.NET existentes (ou seja, um controle anexado ao. um controle existente, cujo objetivo é estender novas funções ao controle existente).
Com esses controles, o desenvolvimento de programas front-end da Web é semelhante ao design de formulários em VB. Agora não só é possível desenhar uma interface semelhante ao Windows Forms, mas também usando a solicitação assíncrona do AJAX e a tecnologia de atualização parcial da página, e com a cooperação do servidor Web, a experiência do usuário pode ser forçada no Windows Forms.
Não importa quantas pessoas desprezem o VB, a onda de popularização da programação visual trazida pelo VB realmente teve um impacto de longo alcance. O impulso da Microsoft para a programação JavaScript nesta etapa também é a tendência geral. Para melhorar a eficiência do desenvolvimento Web, este passo deve ser dado.
Porém, é preciso ressaltar que por mais que seja “reabastecido”, afinal, é “congenitamente deficiente” e ainda é muito difícil para a arquitetura B/S superar C/S em termos de experiência do usuário .
3. O futuro: B/S ou C/S, quem está no comando
Devido à simplicidade de gerenciamento e implantação, a arquitetura B/S tornou-se a primeira escolha para muitos sistemas de informação hoje. experiência. Resumindo, existem os seguintes requisitos:
(1) Interface bonita. B/S tem uma vantagem nesse aspecto.
(2) Entrada conveniente. Por exemplo, muitos usuários esperam inserir dados sem usar o mouse ou preencher dados automaticamente por meio de simples cliques. Isso é difícil de implementar em uma arquitetura B/S e pode resolver esse problema até certo ponto.
(3) Velocidade da luz. Para C/S, há muitas maneiras de obter velocidade de resposta rápida, mas não é fácil para B/S. Devido às limitações do navegador, os poderosos recursos de hardware do cliente estão quase ociosos. Além disso, a velocidade da rede é o gargalo da arquitetura B/S. A menos que a largura de banda possa aumentar rapidamente, a WWW será uma espera mundial.
Embora o C/S tenha uma boa experiência de usuário, seu problema é que é difícil desenvolver um sistema distribuído que abranja toda a Internet. Além disso, como o cliente precisa ser instalado, as atualizações do sistema e o gerenciamento de versões de componentes tornam-se um grande problema. Além disso, ao contrário de B. Na arquitetura /S, apenas os problemas do lado do servidor precisam ser considerados. Na arquitetura C/S, devido ao fato de vários usuários acessarem o servidor ao mesmo tempo, as chamadas e dependências entre os componentes são complexas. também deve ser considerado ao lidar com acesso multithread a recursos compartilhados, processamento de transações, etc. No lado do servidor, a taxa de transferência é bastante limitada. Portanto, o C/S é construído principalmente na rede local para uso interno da empresa.
Atualmente, B/S e C/S coexistem basicamente. Com a ampla aplicação de tecnologias B/S como AJAX, B/S continua a ganhar vantagem, mas é impossível "derrotar completamente o C/S". .
O que é mais interessante é: como uma grande empresa como a Microsoft vê as perspectivas de desenvolvimento de B/S e C/S.
Desenvolvedores comuns como eu não têm a oportunidade de falar diretamente com os executivos da Microsoft, mas podemos ver isso na empresa
?Rota de desenvolvimento de produtos. Aqui estão algumas pistas:
A Microsoft não parece acreditar que o B/S represente a direção futura do desenvolvimento tecnológico. Pelo contrário, muitas de suas ações estão caminhando no sentido de abandonar os navegadores.
Em primeiro lugar, a Microsoft simplificou o desenvolvimento e implantação do C/S e lançou a tecnologia Smart Client, para que a atualização dos programas clientes C/S possa ser realizada automaticamente sem intervenção manual.
Em segundo lugar, a Microsoft trabalhou duro para preencher a lacuna entre B/S e C/S. Ao projetar o ASP.NET, abandonou resolutamente o ASP, que havia alcançado bons resultados, e adotou diretamente um método de programação semelhante "controle visual + orientado a eventos". para VB. Até as páginas da Web são chamadas de "Formulários" - Web Forms.
Terceiro, a Microsoft pode considerar o AJAX uma tecnologia de transição.
A Microsoft demorou a agir em relação ao AJAX até ver a rápida popularidade do AJAX devido à aplicação bem-sucedida da tecnologia AJAX pelo Google e outras empresas para melhorar a experiência do usuário da Web. Em seguida, ela tomou medidas e adicionou extensões AJAX ao ASP.NET. todo o processo foi obviamente As ações não foram agressivas e não foram investidos muitos recursos. Isso foi completamente diferente de quando a Microsoft e a Netscape lançaram uma guerra de navegadores. No entanto, o fato de ter a extensão AJAX integrada como configuração padrão no VS2008 e integrar diretamente a função de depuração de JavaScript no IDE mostra que a Microsoft ainda está enfrentando a realidade e reconhece que o AJAX tem uma posição importante e um grande potencial de desenvolvimento.
Na verdade, analiso que a ambição da Microsoft é “unificar o mundo”, abandonar o navegador e unificar completamente B/S e C/S.
Isso é visto claramente no .NET 3.0/3.5.
Em primeiro lugar, a Microsoft usou o WCF para unificar DCOM, .NET Remoting e outras tecnologias usadas principalmente para C/S, integrando muitos recursos de desenvolvimento empresarial originalmente localizados em COM+, juntamente com a tecnologia de serviços Web usada principalmente para arquitetura B/S, para unificar. e encapsular em um serviço WCF reutilizável. É óbvio que a Microsoft quer mudar o modelo de desenvolvimento de sistemas de informação de CBD para SOA (ou seja, os sistemas futuros irão montar serviços em vez de componentes).
Em segundo lugar, a Microsoft abandonou o modelo de programação de programas de desktop Windows muito maduro (API Win32 + driver de mensagem/evento) e introduziu uma nova estrutura de programação WPF. Uma das principais inovações é o surgimento de XAML (Application Markup Language) que está em conformidade com a especificação XML. . XAML usa arquivos de texto simples em formato XML para descrever interfaces de aplicativos.
Podemos comparar facilmente XAML com XHTML. O navegador analisa o código XHTML e gera uma interface visual da web, enquanto o XAML é analisado pela máquina virtual .NET Framework. No Vista, como o Vista integra diretamente o .NET Framework 3.0, o Vista pode ser considerado um supernavegador. XAML para gerar a interface do usuário e implementar todas as funções do aplicativo.
Como resultado, surgiu um novo modelo de programação Seja um sistema B/S ou C/S, o método é unificado: ler o código XAML à análise à apresentação à recepção da entrada do usuário à exibição dos dados.
Neste modelo de programação, o navegador torna-se um espectador e não é mais o núcleo da aplicação cliente.
O novo modelo de programação é executado em um sistema operacional completo, em vez de em um navegador com funcionalidade limitada. A diferença é enorme. Como as funções de um navegador executado no sistema operacional podem ser comparadas com o próprio sistema operacional?
Agora o sistema operacional pode ser facilmente chamado por meio da API do sistema operacional (Application Programming Interface) organizada de forma orientada a objetos! funções para fazer uso total dos recursos de hardware do cliente (por exemplo, você pode desenvolver facilmente programas multithread no .NET Framework para "espremer" os recursos de trabalho da CPU dual-core). As interfaces de usuário são todas descritas usando XAML, que unifica as tecnologias da camada de interface de B/S e C/S.
O ambiente de execução mais adequado para o WPF é o sistema operacional Vista. Um subconjunto de suas funções, agora chamado Silverlight, é implementado como um plug-in de navegador, permitindo que programas WPF sejam executados em navegadores tradicionais. Como tanto o Silverlight quanto o Vista podem analisar XAML sozinhos, agora você pode usar XAML para escrever apenas um conjunto de código de interface, que é aplicável a B/S e C/S e obtém a mesma experiência do usuário.
Devido a algumas deficiências inerentes ao B/S e AJAX, se o sistema B/S aprimorado pelo AJAX for comparado a uma dançarina, então é na verdade uma dançarina dançando com algemas, e a ideia da Microsoft é, em vez de tentar constantemente reduzir o peso dessa algema, por que não simplesmente abandonar essa algema?
O lançamento do WPF e do WCF pela Microsoft é uma tentativa desse tipo.
Deve-se dizer que a estratégia de desenvolvimento da Microsoft se baseia na análise das vantagens e desvantagens do B/S e C/S existentes. Tem a sua natureza científica e também leva em consideração os seus próprios interesses empresariais. No entanto, ainda existem muitas dificuldades na concretização desta estratégia, porque mesmo sendo tão poderosa como a Microsoft, ela não consegue dominar o mundo. Os adversários da Microsoft são tão inteligentes quanto a Microsoft e a sua tecnologia está a avançar com a mesma rapidez.
Pode-se concluir que, devido à continuidade das aplicações dos sistemas de informação, B/S e C/S coexistirão ao mesmo tempo por um longo período de tempo (talvez três a cinco anos, talvez cinco a dez anos). muitos recursos excelentes do B/S prevalecerão na competição com o C/S, e esta situação não mudará significativamente. Quanto ao AJAX, como arma pesada no sistema B/S, embora seja muito eficaz, tem muitas falhas. Estou cautelosamente otimista quanto ao seu desenvolvimento futuro. No entanto, como desenvolvedor Web, você deve compreender e aplicar esta tecnologia.
Qual será o cenário futuro e se uma determinada tecnologia tem futuro não são decididos pelos indivíduos. Acredito que o padrão final da batalha entre B/S e C/S será o resultado do jogo conjunto entre múltiplos fatores. Para os indivíduos, eles devem acompanhar os tempos e ajustar suas ações e estratégias em tempo hábil. Este é o destino dos desenvolvedores de software contemporâneos.