Software em 3 Camadas ou Stored Procedure?

Boa tarde pessoal,

Nós da empresa temos um software desenvolvido em Delphi + Firebird que roda aproximadamente a uns 4 anos em uma Transportadora. Como é normal em desenvolvimento Delphi e principalmente desenvolvimento de um periodo atras, todo o software possui apenas 1 camada, onde tem a tela com seus campos e botões e as regras de negócios estão embutidas dentro dos eventos desses botões.
A questão de velocidade está legal dentro da rede interna (LAN), mas está surgindo alguns problemas de velocidade na rede WAN (ligado pela Embratel). Não é todo o sistema, são algumas consultas mais “trabalhadas”, principalmente o setor financeiro. Por exemplo, o usuário deseja verificar a folha de pagamento de um funcionário, o sistema se conecta ao banco de dados e pede essas informações, mas para se gerar uma folha de pagamento nesse sistema, necessita de várias informações de outras tabelas e cálculos (vales, despesas, salário fixo, comissão, etc etc etc), só que invés dessas informações forem trabalhadas no servidor e ser trazidas prontas para a tela do usuário, o sistema busca todas essas informações e as “trabalha” dentro do terminal (bem comum nesse tipo de programação Delphi). Essas funcionalidades está gerando tempo muito grande nas filiais localizadas em outras cidades (no total são 4).

O que é obrigatório a ter: Interface DELPHI.
Quais as duas opções que eu vi
:arrow: Criar um servidor Java, que irá receber requisições, trabalhar, e depois enviar para o Delphi (padrão MVC). Mas não faço nem idéia de como vou fazer essa ligação Java+Delphi. Já trabalho a algum tempo com MVC pra web, usando Struts e agora Webwork, então vários conceitos e padrões já conheço.

:arrow: Deixar o sistema do jeito que está, e nesses casos mais “pesados”, gerar Stored Procedures no servidor, o tempo de desenvolvimento será menor, irei aproveitar grande parte do que já tenho, e não irei precisar dar muita manutenção em um sistema que faz algum tempo que está parado.

Gostaria da opinião de vocês e aproveitando a deixa, tenho um sistema em Delphi também mas em início de projeto (a nível de códigos estamos nos primeiros cadastros), e que acredito que futuramente será ligado entre as filiais (o sistema é de outra empresa mas que pertence ao mesmo grupo), então acredito que usar uma solução Java+Delphi seria legal, pois ainda estamos em fase inicial de projeto, pergunto: como eu poderia fazer essa ligação? (talves Corba?).

–editado—
esqueci de perguntar também (quantas perguntas), existe algum software para medir quantos kbytes são transmitidos na rede? Quero ter uma noção de quanto eu vou ganhar usando SP em relação a funcionalidade atual, a Embratel libera isso quando o software está rodando nos clientes, mas não gostaria de fazer esses testes já em produção e sim em ambiente de testes mesmo. (O Firebird está rodando em um servidor Linux dedicado apenas para o Banco de Dados, os terminais são windows de todas as versões possíveis, menos Win 95).

Obrigado

Olá

Do cliente Delphi para o servidor java envie mensagens http tipo post ou get. Acredito que o Delphi tenha componentes para isto. O seu servlet vai tratar as mensagens igualzinho as que recebe de um browser.

Outra alternativa seria usar web services.

[]s
Luca

Sofrendo o risco de tomar alguns tiros, dependendo do tamanho da coisa, use uma SP oras.

No sistema que estamos desenvolvendo há uma operação de contagem, onde são realizados vários e vários joins no banco, e apenas alguns números são retornados. De jeito nenhum que eu ia pegar todos esses objetos pra fazer uma continha. Ainda mais se o banco de dados estivesse em outra máquina.

edit: esqueci de mencionar que eu acho isso uma merda, tanto que o nome do método é getGambiarra() … mas às vezes fica complicado mesmo :expressionless:

[quote=“LIPE”]Sofrendo o risco de tomar alguns tiros, dependendo do tamanho da coisa, use uma SP oras.

No sistema que estamos desenvolvendo há uma operação de contagem, onde são realizados vários e vários joins no banco, e apenas alguns números são retornados. De jeito nenhum que eu ia pegar todos esses objetos pra fazer uma continha. Ainda mais se o banco de dados estivesse em outra máquina.

edit: esqueci de mencionar que eu acho isso uma merda, tanto que o nome do método é getGambiarra() … mas às vezes fica complicado mesmo :|[/quote]

Então LIPE, para o projeto que já está rodando, estamos quase escolhendo essa opção (também por ser mais rápida), agora no caso do novo projeto que ainda está nascendo, estamos pensando em fazer o servidor Java e os Clientes Delphi, mas para isso precisamos analisar e testar várias coisas, uma delas é o lance de tráfico na rede, complexidade na programação e manutenção, etc etc etc.
Vou testar o lance que o Luca disse sobre fazer um Servlet, vou tentar testar o tal do Corba e etc.

Olá

Conselho que vale ouro: esqueça CORBA se ainda não sabe usa-lo. Assim evitará todo o tempo de estudo. Vá pelo caminho http que citei ou parta logo para web services.

[]s
Luca

[quote=“Luca”]Olá

Conselho que vale ouro: esqueça CORBA se ainda não sabe usa-lo. Assim evitará todo o tempo de estudo. Vá pelo caminho http que citei ou parta logo para web services.

[]s
Luca[/quote]

Não sei usá-lo mesmo :wink:

Vou fazer os testes, no caso do WebServices, já lí várias vezes aqui que o seu desempenho não é dos melhores, mas nunca testei

Cara, no lance do novo projeto, só desenvolver da 2ª camada em diante exatamente da mesma maneira que faria num projeto totalmente em Java. A performance independe do cliente. Tráfego é tráfego em qualquer linguagem hehe a diferença é a maneira.

Você poderia criar um programa em 3 camadas usando o Delphi. Se não souber como, procure o livro “Delphi - Guia do Desenvolvedor” que mostra como fazer isso usando MIDAS/DataSnap.

Ou então, como já foi postado aqui: usar Web Services para fazer a comunicação entre Java e Delphi.

boa sorte.

Olá

E porque não começar com o velho, simples e bom http que eu insisto tanto?

Qual a dificuldade de enviar uma stringzinha com a consulta sql pela web e receber um stringão com o resultado da consulta sql? Parece muito mais fácil parsear o stringão com split do que aprender os pacote de web services para Delphi e Java.

[]s
Luca

[quote=“Luca”]E porque não começar com o velho, simples e bom http que eu insisto tanto?

Qual a dificuldade de enviar uma stringzinha com a consulta sql pela web e receber um stringão com o resultado da consulta sql? Parece muito mais fácil parsear o stringão com split do que aprender os pacote de web services para Delphi e Java.[/quote]

Apoiado. E se o split nao for adequado uma opcao seria criar uma definicaozinha em XML e usar um parser esperto para interpreta-lo.

Marcio Kuchma

[quote=“Luca”]Olá

Olá

Conselho que vale ouro: esqueça CORBA se ainda não sabe usa-lo. Assim evitará todo o tempo de estudo. Vá pelo caminho http que citei ou parta logo para web services.

[/quote]

Corba é um lago, quase um marzão, não nade sem colete salva-vidas :wink:

As solucões do Luca e do kuchma, são boas e faceis de implementar.

Além disso se de uma hora para outra vc precisar disponibilizar uma camada de apresentação no Browser ( ex.: em JSP ), vai ser simples de implementar.

Meu voto vai para as soluções que eles apresentaram.