Logica de negocio no banco

Bom dia pessoa, esse assunto é bem chato e principalmente agente do java sabe que não seria legal deixar a lógica no banco.

Deixando vocês ciente de que eu não concordo de deixar a logica no banco vai uma pergunta.

Caso a lógica esteja no banco, e eu preciso fazer uma mudança em um sistema que esteja em produção, eu apenas concerto a lógica do banco e nem preciso subir outra versão…claro que muitas vezes vou precisar mecher no sistema tambem, mais levando em conta que nao vai precisar mexer…

EU POSSO DIZER QUE ISTO É UMA VANTAGEM DE DEIXAR A LOGICA NO BANCO?

Vantages e desvantagens

Logica no java Vs Logica no banco

??

Valew pessoal

A princípio é uma vantagem sim, pois torna atualização rápida, porém traz uma grande desvantagem, controle de versão. Já vi casos em que um ERP com lógica no SGBD tinha uma determinada store procedure se comportando de uma forma em um cliente e de outra nos outros devido a essa facilidade de alteração e ausência de controle no versionamento.

Eu só coloco logica no banco se o ganho de performance for alto. E só faço isso se for Oracle, nos outros bancos a dor de cabeça não vale a pena.

O controle de versão é feito da mesma forma que se fosse só Java, você usa SVN, CVS etc…

O que pode ser feito é restringir o acesso as procedures do banco para que não hajam alterações indevidas.

Agora quanto a sua pergunta, vai depender do que for alterado na regra de negócio e nas porcedures para saber se será necessário alterar o Java também. Exemplo: alteração de parâmetros de entrada ou saída.

flw!

Então é mais vantagens deixar a logica no banco?

quais seria sua desv e vant?

Bom dia a todos.

[quote=erickfm8]Então é mais vantagens deixar a logica no banco?

quais seria sua desv e vant?[/quote]

Isto depende da infra-estrutura do seu servidor, bem como do desempenho de sua aplicação, e porque não dizer também, depende do tamanho do seu banco (quantidade de tabelas).

Se voce possui um servidor em duas camadas (Cliente - Servidor), possa ser que fazer uma pequena lógica no banco, tal como validações de dados em triggers para acelerar o processamento da aplicação, seja uma pequena vantagem, porém voce está trocando seis por meia dúzia, tirando o processamento da aplicação e em contra partida aplicando-a no banco, ora se o o computador é o mesmo, o processador é o mesmo, então não há vantagem nenhuma

Contudo a coisa muda de figura se for tres camadas (Cliente - Intermediário - Provedor), onde as regras de negócio deve sempre estar na camada intermediária, ou seja, na aplicação, deixando apenas o provedor encarregado apenas de armazenar os dados, pois não haveria sentido voce colocar a maior parte do processamento na aplicação e um pouco no provedor, se essas camadas foram separadas exatamento para dar celeridade no processamento, portanto comprometer o processamento em ambos, seria um erro primário.

Quando disse que depende também do tamanho do seu banco (quantidade de tabelas) isto implica em dizer quantidade de dados que são trafegados na rede, se a sua rede for intranet onde a conexão é lenta devida a distância entre o Servidor e o Cliente, causando interrupção constante na transação, então a melhor opção é deixar o processamento na aplicação, só para garantir a integridade física dos dados, principalmente se esta transação é feita em pacotes (datasets), que diga-se de passagem, já está obsoleto.

A melhor forma mesmo é voce deixar o processamento na aplicação, isto pois há também um outro fator que devemos levar em consideração: Digamos que a sua empresa fez toda a aplicação em Delphi Net, ou Visual Studio Net, armazenando dados em banco do tipo Firebird ou SQL Server, ai de uma hora pra outra resolve mudar de Sistema Operacional de Windows pra Linux, e mudar o banco para Oracle, e aplicação para Java, por ser multiplataforma, o que voce faria se o se contivesse algum processamento no banco :?: :?: :?:

Diante do acima exposto, a melhor forma é fazer a lógica do processamento toda na aplicação.

Um abraço.

SIM concordo em nao deixa um pouco em cada lugar…

mais neste caso não vajo desvantagem e deixar só no banco… porque?? esta apenas em um lugar no Banco

mais eu não possa ter oracle para linux e windows com a mesma logica?

Vantagens

  • ganho de performance somente em processos grandes (pq processos simples CRUD ficam a mesma coisa)
  • arquitetura simples e fácil
  • desenvolvimento mais rápido.

Desvantagens

  • nenhuma portabilidade
  • solução amarrada com o provedor de banco de dados, suas politicas de usabilidade e atualização de versão ao longo do tempo.
  • restrição de comercialização - a venda da solução vai forçar o comprador a adquirir o mesmo banco de dados, sendo que poderá ter clientes interessadas na solução, que usam outro provedor de banco de dados.

Boa tarde galera !

Sobre a facilidade de alteração, não sei como é a burocracia na empresa que você trabalha, mas aqui, uma alteração de procedure seria tão complicada quanto uma alteração na app java.
Ou seja, não é porque esta no banco que você pode acessar diretamente a produção e fazer as alterações que quiser.
Se você consegue fazer isso numa procedure, porque não consegue fazer na aplicação ?

Claro que aí também vai depender de que tipo de sistema você esta falando… se trata-se de uma aplicação num server, acredito que dá na mesma subir uma nova versão da app ou fazer uma alteração numa procedure.

Eu particularmente gosto de manter minha logica em classes de negocio.

Sobre a performance, acho que tudo tem que ser muito bem analisado, ja tive caso real em que uma procedure no oracle demorava 72 horas para terminar se processamento, mudando para java com uso de thread´s o tempo caiu para menos de 10 horas…

Bom, pode ser que a forma como estava desenvolvido em PL/SQL estava muito ruim, sei lá.
Mas já tive outra situação em que era necessário processar aproximadamente 20 milhoes de registros, isso foi colocado em um cursor do Oracle e não rolou… a solução que aplicamos foi quebrar em varios processos java cada um tratando aproximadamente 500 mil registros… rolou legal.

[]s

porque nenhuma portabilidade,não posso usar o msm banco em mac e linux?

foçar o cliente usar oracle ou sql server,seria mesma coisa a escolher java ou c#, aqui seria igual não seria?

^^